如何在BigQuery中使用UNNEST展开行,同时让部分字段仅显示在单行
解决方案
可以通过窗口函数ROW_NUMBER()给每组展开后的行编号,再结合CASE语句控制字段显示,实现仅组内第一行展示notes和fru的效果,具体SQL如下:
SELECT parent, child, name, CASE WHEN row_num = 1 THEN notes ELSE NULL END AS notes, CASE WHEN row_num = 1 THEN fru ELSE NULL END AS fru FROM ( SELECT parent, child, name, notes, fru, -- 按原始行的唯一标识分组,给展开后的行生成序号 ROW_NUMBER() OVER (PARTITION BY parent, child ORDER BY idx) AS row_num FROM plm-wave-dev.data_migration_sandbox.ref_des_not_empty, UNNEST(GENERATE_ARRAY(1, qty)) AS idx ) t
关键逻辑说明
- 子查询中:通过
PARTITION BY parent, child将同一原始行展开的所有行归为一组(如果你的表有更精准的唯一主键,比如id,替换这里的分组字段即可),ROW_NUMBER()会给每组内的行按idx(展开的数组元素)生成从1开始的序号。 - 外层查询中:用
CASE判断序号是否为1,仅在第一行保留notes和fru的值,其余行设为NULL,达到你要的显示效果。
内容的提问来源于stack exchange,提问作者naveen
相关产品推荐
相关产品推荐

