Snowflake SQL透视表生成后添加WHERE筛选提示无效标识符的问题
Snowflake透视表WHERE筛选报错“无效标识符”的问题解决
问题场景
你编写的Snowflake透视表SQL语句如下,可正常运行并生成预期结果:
WITH relevantData AS ( SELECT "headline", "entityId", "keyId", "eventType" FROM events ), model AS ( SELECT * FROM relevantData PIVOT( MAX("entityId") FOR "eventType" IN ('Buyer', 'Seller') ) pvt ("headline", "keyId", "Buyer", "Seller") ) SELECT * FROM model
运行结果结构:
| "headline" | "keyId" | "Buyer" | "Seller" |
|---|---|---|---|
| A Buys B | 4 | A | B |
但在最后添加WHERE "Buyer" = 'A'进行筛选时,系统提示“无效标识符”错误。
问题原因
你在PIVOT子句的别名定义中错误地包含了分组列(headline、keyId)。Snowflake的PIVOT语法规定:别名括号内仅需指定透视生成的列的名称,分组列会自动保留原名称,无需额外声明。你的写法混淆了列的定义逻辑,导致系统无法正确解析"Buyer"这个标识符。
解决方法
方法1:修正PIVOT的别名定义
移除别名括号中的分组列,仅保留透视生成的列名:
WITH relevantData AS ( SELECT "headline", "entityId", "keyId", "eventType" FROM events ), model AS ( SELECT * FROM relevantData PIVOT( MAX("entityId") FOR "eventType" IN ('Buyer', 'Seller') ) pvt ("Buyer", "Seller") ) SELECT * FROM model WHERE "Buyer" = 'A'
方法2:省略自定义列名(更简洁)
如果不需要自定义透视列的名称,直接省略别名括号,此时透视列名默认使用IN子句中的字符串(大小写不敏感),WHERE子句中无需使用双引号:
WITH relevantData AS ( SELECT "headline", "entityId", "keyId", "eventType" FROM events ), model AS ( SELECT * FROM relevantData PIVOT( MAX("entityId") FOR "eventType" IN ('Buyer', 'Seller') ) pvt ) SELECT * FROM model WHERE Buyer = 'A'
内容的提问来源于stack exchange,提问作者MYK
相关产品推荐
相关产品推荐

