Pivot을 사용하여 동적으로 열을 만들려고하고 있는데 내가 찾고있는 적절한 결과를 얻지 못하고 있습니다. 각 질문 (행)마다 가능한 모든 답변을 자체 열에 표시해야하며 코스에 여러 질문이 있습니다. 각 가능한 답변을 열 이름으로 어떻게 생성하고 각 행에 대해 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)
다음 questionIds과하지 않은 생성 된 컬럼으로
[1],[10],[11],[12],[13],[14],[15],[16],[2],[3],[4],[5],[6],[7],[8],[9]
을 '등 ... (2) 답변 1 답변', 그들은에 표시되지 않습니다 주문.
courseId
질문
과정
questionId question courseId
는
답변 : 여기에 간결하게하기 위해 는 데이터베이스 테이블의 관련 열입니다AnswerId questionId answer
도움을 주시면 감사하겠습니다.
불충분 한 세부 사항에 대해 죄송합니다. 나는 테이블 구조의 일부를 포함시키기 위해 나의 질문을 편집했다. 어쨌든 당신의 모범은 완벽하게 작동했습니다. 고맙습니다! – Drew