Du ønsker at pivotere data - ændre kolonnedata til rækker. Den gamle måde er at bruge CASE sætninger - fra og med SQL Server 2005 kan du bruge PIVOT kommando. Jeg vil overlade det til en anden at give PIVOT-eksemplet.
SELECT t.memberid,
CASE WHEN t.questionno = 1 THEN t.answerno ELSE NULL END AS 1,
CASE WHEN t.questionno = 2.1 THEN t.answerno ELSE NULL END AS 2.1,
CASE WHEN t.questionno = 2.2 THEN t.answerno ELSE NULL END AS 2.2,
CASE WHEN t.questionno = 3 THEN t.answerno ELSE NULL END AS 3
CASE WHEN t.questionno = 5 THEN t.answerno ELSE NULL END AS 5
CASE WHEN t.questionno = 7 THEN t.answerno ELSE NULL END AS 7
FROM ANSWER t
Det er ikke klart for mig, hvad datatypen for spørgsmålskolonnen er, opdater, så den passer, hvis det er nødvendigt.
Hvis brugere kan definere deres egne spørgsmål, skal du bruge dynamisk SQL . Du skal først få en liste over spørgsmålsnumre og derefter konstruere CASE-udsagnene baseret på disse resultater. Ligeledes for PIVOT...
DECLARE @SQL nvarchar(4000)
DECLARE @questionno [data type here]
SET @SQL = 'SELECT t.memberid,'
DECLARE c1 CURSOR READ_ONLY FOR
SELECT t.questionno
FROM ANSWER t
GROUP BY t.questionno
ORDER BY t.questionno
OPEN c1
FETCH NEXT FROM c1 INTO @questionno
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = @SQL + ' CASE WHEN t.questionno = '+ @questionno +' THEN t.answerno ELSE NULL END AS '+ @questionno','
FETCH NEXT FROM c1 INTO @questionno
END
CLOSE c1
DEALLOCATE c1
SET @SQL = @SQL + 'NULL FROM ANSWER t '
EXEC(@SQL)
NULL FROM
... er fordi jeg er for doven til at slippe af med kommaet, der ville komme fra den sidste CASE-udsagn.