使用PIVOT创建地址统计透视表时出现语法错误,请求解决
解决SQL PIVOT语法错误
你的代码存在两个关键语法问题:
- PIVOT的
FOR city IN()部分,每个城市字符串必须指定合法的列标识符,SQL不允许直接用带单引号的字符串作为列名。 - SELECT子句中不能直接写城市字符串,需要引用PIVOT生成的列名来获取对应城市的地址数量。
修正后的SQL代码如下:
SELECT 'addressCount' AS address_count, Bangalore, Chennai, Thane FROM (SELECT id, city FROM address) a PIVOT (COUNT(id) FOR city IN ( [Bangalore], [Chennai], [Thane] )) p;
关键修改说明:
- 在
FOR city IN()里,用方括号[]包裹城市名称(作为列的合法标识符),这些名称会直接成为透视后的列名,无需额外单引号。 - SELECT子句中直接引用这些列名(
Bangalore、Chennai、Thane),即可获取对应城市的地址统计数。
如果你的SQL方言(如Oracle)要求给IN里的元素显式指定别名,可使用以下写法:
SELECT 'addressCount' AS address_count, b AS Bangalore, c AS Chennai, t AS Thane FROM (SELECT id, city FROM address) a PIVOT (COUNT(id) FOR city IN ( 'Bangalore' AS b, 'Chennai' AS c, 'Thane' AS t )) p;
内容的提问来源于stack exchange,提问作者Arijit Biswas
相关产品推荐
相关产品推荐

