Standard SQL中UNNEST重复字段时仅首个元素保留原值的实现方法
Standard SQL实现数组展开后仅单行保留原值的查询方案
你可以通过UNNEST搭配位置偏移量来实现需求,具体查询语句如下:
SELECT Id, service AS Services, -- 首个展开元素保留原值,其余设为0 CASE WHEN offset = 0 THEN Value ELSE 0 END AS Value, Type FROM -- 替换为你的实际表名 your_dataset.your_table_name, UNNEST(Services) AS service WITH OFFSET offset -- 保持输出顺序和预期结果一致 ORDER BY Id, offset
说明
WITH OFFSET会返回数组元素对应的下标索引,Standard SQL中数组下标默认从0开始,因此判断offset=0的行保留原值即可- 如果你不需要固定首个元素保留原值,只要每行原始数据对应展开后的任意一行保留原值,也可以用窗口函数实现:
SELECT Id, service AS Services, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Id) = 1 THEN Value ELSE 0 END AS Value, Type FROM your_dataset.your_table_name, UNNEST(Services) AS service ORDER BY Id
内容的提问来源于stack exchange,提问作者Luiscri
相关产品推荐
相关产品推荐

