如何为BigQuery PIVOT行转列指定offset取值范围
BigQuery 无需手动枚举Offset的行转列实现
BigQuery的PIVOT子句本身不支持直接指定offset范围,必须明确列出所有目标取值,但可以通过动态SQL生成的方式避免手动枚举0到99,且无需使用BigQuery过程语言,具体实现如下:
核心思路
用标准SQL生成0到99的offset列表字符串,再拼接成完整的PIVOT语句,通过EXECUTE IMMEDIATE执行动态生成的SQL。
示例代码
EXECUTE IMMEDIATE ( SELECT ''' SELECT * FROM long_format PIVOT( ANY_VALUE(vals) AS vals FOR offset IN (''' || STRING_AGG(CAST(offset AS STRING), ', ') || ''') ) ''' FROM UNNEST(GENERATE_ARRAY(0, 99)) AS offset );
代码说明
GENERATE_ARRAY(0, 99)生成包含0到99所有整数的数组,UNNEST将数组展开为单行多值的结果集STRING_AGG将所有offset值拼接成逗号分隔的字符串,作为PIVOT子句中IN的取值列表- 通过字符串拼接生成完整的PIVOT查询语句,最后用
EXECUTE IMMEDIATE执行该动态SQL
内容的提问来源于stack exchange,提问作者n_user184
相关产品推荐
相关产品推荐

