我有一张大学统计数据表,如下所示:
StatID | UniversityID | StatValue
1 | 1 | 100
2 | 1 | 90
3 | 1 | 80
1 | 2 | 50
2 | 2 | 55
我想查询返回类似的内容:
(Rows are StatIDs, Columns are UniversityIDs)
StatID | 1 | 2 | 3
1 | 100 | 50 | NULL
2 | 90 | 55 | NULL
3 | 80 | NULL | NULL
这是我的疑问:
SELECT StatID, 1, 2, 3
FROM
(SELECT StatID, UniversityID, StatValue FROM @table) up
PIVOT
(MAX(StatValue) FOR UniversityID IN (1, 2, 3)) AS pvt
ORDER BY StatisticID;
我在FOR UniversityID IN (1,
上收到错误说:
Incorrect syntax near '1'. Expecting ID, QUOTED_ID, or '.'.
我做错了什么?它是否与int
作为列标题有关?
我将使用〜260,000行(约300列和~3,000行)
答案 0 :(得分:9)
你有错误的语法:
答案 1 :(得分:2)
鉴于您想要生成输出,我不确定您是否需要使用PIVOT
运算符。
您可以通过以下查询获得上面输出的 close :
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数据。 / p>
如果你真的想要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;
(你错过了方括号[])