Учитывая, что вы хотите произвести как вывод, я не уверен, что вам нужно использовать оператор PIVOT
.Вы можете получить близко к выводу, который у вас есть выше, с помощью следующего запроса:
SELECT s.StatID
,UniversityID1 = SUM(CASE WHEN UniversityID = 1 THEN StatValue ELSE NULL END)
,UniversityID2 = SUM(CASE WHEN UniversityID = 2 THEN StatValue ELSE NULL END)
,UniversityID3 = SUM(CASE WHEN UniversityID = 3 THEN StatValue ELSE NULL END)
FROM StatsTable s
GROUP BY s.StatID
, который выдаст
StatID | UniversityID1 | UniversityID2 | UniversityID3
1 | 100 | 50 | NULL
2 | 90 | 55 | NULL
3 | 80 | NULL | NULL
У него нет последнегострока со StatID = 4, но я не уверен, какое значение это вам все равно дает, так как все значения равны NULL и в вашей входной таблице нет данных StatID = 4.
Если вы действительно хотитеPIVOT
синтаксис, вот он:
SELECT StatID
,UniversityID1 = [1]
,UniversityID2 = [2]
,UniversityID3 = [3]
FROM
(SELECT StatID, UniversityID, StatValue FROM @table) up
PIVOT
(SUM(StatValue) FOR UniversityID IN ([1], [2], [3])) AS pvt
ORDER BY StatID;
(Вы пропустили квадратные скобки [])