0
我正在嘗試使用數據透視表來動態創建列,但我沒有得到正在尋找的正確結果。我需要在每個問題(行)的自己的專欄中顯示所有可能的答案,並且在課程中有多個問題。如何將每個可能的答案生成爲一個列名稱,並按courseId和每行的questionId進行過濾?可能答案的數量因問題而異。這應該通過光標而不是透視來完成嗎?動態數據透視列與Sql Server中的相關表格
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@courseID float(24) = 1
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(questionID)
FROM answers
INNER JOIN questions ON questions.questionID = answers.questionID
WHERE questions.courseId = @courseID
order by 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
set @query = 'SELECT * from
(
select Q.courseId, C.courseName, Q.question, Q.questionID, A.answer
from questions Q
inner join courses C ON Q.courseId = C.courseId
inner join answers A ON A.questionID = Q.questionID
where (Q.courseId = ''' + Str(@courseID) + ''')
) x
pivot
(
max(answer)
for questionId in (' + @cols + ')
) AS p'
execute(@query)
當運行上面我得到:
[1],[10],[11],[12],[13],[14],[15],[16],[2],[3],[4],[5],[6],[7],[8],[9]
由於生成列這是questionIds而不是「答案1,答案2 ...等」,並且它們並不顯示在訂購。
爲了簡潔這裏的目的是相關的列數據庫中的表:
課程
courseId
問題
questionId question courseId
答案
AnswerId questionId answer
任何幫助表示讚賞。
對不起,缺乏細節。我編輯我的問題,包括一些表結構。無論如何,你的例子完美無缺。謝謝! – Drew