SQL字符串透视聚合:英国银行假日表转列方案求助(Serverless环境)
解决方案
可以通过条件聚合实现需求,无需使用PIVOT或性能低下的自连接,完全适配SQL Serverless的环境限制:
SELECT [日期(Date)], MAX(CASE WHEN [地区(Region)] = 'Scotland(苏格兰)' THEN 1 ELSE 0 END) AS [Scotland(苏格兰)], MAX(CASE WHEN [地区(Region)] = 'England-and-Wales(英格兰和威尔士)' THEN 1 ELSE 0 END) AS [England-and-Wales(英格兰和威尔士)], MAX(CASE WHEN [地区(Region)] = 'Northern-Ireland(北爱尔兰)' THEN 1 ELSE 0 END) AS [Northern-Ireland(北爱尔兰)] FROM OPENROWSET( BULK '你的Parquet文件存储路径', FORMAT = 'PARQUET' ) AS bank_holidays GROUP BY [日期(Date)] ORDER BY [日期(Date)];
关键逻辑说明
- 条件聚合替代透视:用
CASE语句针对每个地区标记是否存在记录(存在返回1,否则0),再通过MAX聚合函数保留该日期对应地区的有效标记——只要该日期在某地区有至少一条记录,最终结果就是1,否则为0。 - 避免性能问题:直接通过
GROUP BY [日期(Date)]获取所有唯一日期,无需额外自连接生成日期行,大幅提升查询效率。 - 适配环境限制:仅使用
OPENROWSET读取Parquet数据,未涉及函数、临时表或存储过程,完全符合SQL Serverless的操作约束。
注意:确保[地区(Region)]的匹配字符串与Parquet数据中的值完全一致,包括括号内的中文内容,避免判断逻辑失效。
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

