У меня есть следующий код, который генерирует данные, аналогичные моим. Публикация здесь ( PivotWithoutAggregateFunction ) предполагает, что использование оператора CASE вместо PIVOT лучше для нечисловых значений. Который, если это не так, то, наверное, сейчас самое время это исправить!
DECLARE @QA1 TABLE (SID varchar(7), FormID varchar(max), DateExam date, Present varchar(3))
INSERT INTO @QA1 VALUES(1, 'Form1', '20110101', 'Yes')
INSERT INTO @QA1 VALUES(2, 'Form1', '20110201', 'Yes')
INSERT INTO @QA1 VALUES(3, 'Form1', '20110301', 'Yes')
INSERT INTO @QA1 VALUES(4, 'Form1', '20110401', 'Yes')
INSERT INTO @QA1 VALUES(5, 'Form1', '20110122', 'Yes')
INSERT INTO @QA1 VALUES(1, 'Form2', '20110222', 'Yes')
INSERT INTO @QA1 VALUES(2, 'Form2', '20110322', 'Yes')
INSERT INTO @QA1 VALUES(3, 'Form2', '20110422', 'Yes')
INSERT INTO @QA1 VALUES(1, 'Form3', '20110128', 'Yes')
INSERT INTO @QA1 VALUES(1, 'Form4', '20110228', 'Yes')
INSERT INTO @QA1 VALUES(5, 'Form5', '20110328', 'Yes')
INSERT INTO @QA1 VALUES(5, 'Form6', '20111228', 'Yes')
INSERT INTO @QA1 VALUES(4, 'Form2', '20111228', 'Yes')
SELECT SID,
MIN(CASE FormID WHEN 'Form1' THEN Present END) AS 'First',
MIN(CASE FormID WHEN 'Form2' THEN Present END) AS 'Second',
MIN(CASE FormID WHEN 'Form3' THEN Present END) AS 'Third',
MIN(CASE FormID WHEN 'Form4' THEN Present END) AS 'Fourth',
MIN(CASE FormID WHEN 'Form5' THEN Present END) AS 'Fifth',
MIN(CASE FormID WHEN 'Form6' THEN Present END) AS 'Sixth'
FROM @QA1
GROUP BY SID
ORDER BY SID
Тем не менее, выходные данные имеют NULL в строке / столбце, которые не имеют каких-либо форм, которые, хотя и правильные, мне намного сложнее читать.
SID First Second Third Fourth Fifth Sixth
1 Yes Yes Yes Yes NULL NULL
2 Yes Yes NULL NULL NULL NULL
3 Yes Yes NULL NULL NULL NULL
4 Yes Yes NULL NULL NULL NULL
5 Yes NULL NULL NULL Yes Yes
Как я могу изменить свой CASE, чтобы я либо ничего не получил (т.е. ''), либо хотя бы "Нет"?