Търсите да обобщите данни - променете данните в колони в редове. Старият училищен начин е да използвате CASE отчети - от SQL Server 2005 можете да използвате ОСНОВНА ОСНОВА команда. Ще оставя на някой друг да предостави примера за PIVOT.
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
Не ми е ясно какъв е типът данни на колоната questionno, актуализирайте го, ако е необходимо.
Ако потребителите могат да дефинират свои собствени въпроси, трябва да използвате динамичен SQL . Първо ще трябва да получите списък с въпросници и след това да конструирате CASE изразите въз основа на тези резултати. По същия начин за 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
... е, защото съм твърде мързелив, за да се отърва от запетаята, която ще дойде от последния оператор CASE.