Presto动态列名赋值失败求助:基于子查询设置列名遇问题
Presto动态设置列名问题
你尝试编写Presto查询,想要基于另一查询的结果动态分配列名,但当前写法无法生效。
你尝试的代码
WITH x AS ( SELECT DATE_TRUNC('Week', CURRENT_DATE) AS w0, DATE_TRUNC('Week', CURRENT_DATE) + INTERVAL '7' DAY AS w1 ) SELECT 100 AS ( SELECT w0 FROM x )
期望输出
2023-10-23 ---------- 100
解决方案
Presto的静态SQL不支持直接用子查询结果作为列名,要实现这个需求,得用动态SQL结合EXECUTE语句来实现:
WITH x AS ( -- 将日期转换为字符串,用于拼接列名 SELECT DATE_TRUNC('Week', CURRENT_DATE)::VARCHAR AS col_name ) EXECUTE ( -- 拼接出包含动态列名的SQL语句 SELECT 'SELECT 100 AS "' || col_name || '"' FROM x );
说明
- 先把
DATE_TRUNC返回的日期类型转为字符串,避免拼接SQL时出现格式错误 - 通过子查询拼接出完整的查询语句,再用
EXECUTE执行这个动态生成的SQL - 注意:
EXECUTE需要Presto 312及以上版本(或Trino)支持,确保你的环境满足要求
内容的提问来源于stack exchange,提问作者MTT
相关产品推荐
相关产品推荐

