Я пытаюсь использовать Pivot для динамического создания столбцов и не получаю надлежащих результатов, которые я ищу. Мне нужно показать все возможные ответы в своем столбце для каждого вопроса (строки), и в курсе есть несколько вопросов. Как я могу генерировать каждый возможный ответ в виде имени столбца и фильтровать по курсу Id и questionId для каждой строки? Количество возможных ответов зависит от вопроса. Должно ли это выполняться с помощью курсора вместо точки поворота?Динамические опорные столбцы со связанными таблицами на сервере Sql
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