BigQuery SQL如何将多code列整形为单列且列名作为值
BigQuery 宽表转长表实现方案
方案1:使用UNPIVOT语法(推荐,适配code列数量多的场景)
你可以直接用BigQuery原生的UNPIVOT语法完成行列转换,代码如下:
SELECT id, REGEXP_EXTRACT(code_col, r'code_(\d+)') AS code FROM 你的数据集名.你的表名 UNPIVOT ( flag FOR code_col IN (code_44145, code_44146, code_44207, code_44208) ) WHERE flag = 1
逻辑说明:UNPIVOT会把你指定的所有code_开头的列转为行,code_col字段存储原列名,flag存储原列对应的值,过滤出flag=1的行后,用正则提取列名里的数字即可得到目标code字段。
方案2:CASE WHEN写法(适配列数少的场景)
如果你的code列数量很少,可以用更直观的CASE WHEN判断实现:
SELECT id, CASE WHEN code_44145 = 1 THEN '44145' WHEN code_44146 = 1 THEN '44146' WHEN code_44207 = 1 THEN '44207' WHEN code_44208 = 1 THEN '44208' END AS code FROM 你的数据集名.你的表名
因为你已经提前预处理过数据,不会出现同一行多个code列值为1的情况,不需要额外过滤空值。
内容的提问来源于stack exchange,提问作者Dylan Russell
相关产品推荐
相关产品推荐

