'1'附近的语法不正确。期待ID,QUOTED_ID或'。' SQL Pivot出错

时间:2012-02-18 03:59:28

标签: sql sql-server sql-server-2008 pivot pivot-table

我有一张大学统计数据表,如下所示:

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行)

2 个答案:

答案 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;

(你错过了方括号[])