如何在Snowflake SQL中按ID分组并保持字段顺序,合并重复列值?
Snowflake SQL实现分组聚合并保留字段顺序/合并同值列
需求说明
- 按
ID字段分组 - 将
Sub_ID、Value、QTY字段按原有行顺序合并为逗号分隔的字符串 - 若
Currency或UOM在同一分组内所有值完全相同,则仅显示一次该值
原始数据
| ID | Sub_ID | Value | Currency | QTY | UOM |
|---|---|---|---|---|---|
| 1001 | 1 | 10 | USD | 1 | cm |
| 1001 | 2 | 200 | USD | 100 | cm |
| 1001 | 3 | 90 | USD | 10 | cm |
期望结果
| ID | Sub_ID | Value | Currency | QTY | UOM |
|---|---|---|---|---|---|
| 1001 | 1,2,3 | 10,200,90 | USD | 1,100,10 | cm |
实现SQL代码
SELECT ID, LISTAGG(Sub_ID, ',') WITHIN GROUP (ORDER BY Sub_ID) AS Sub_ID, LISTAGG(Value, ',') WITHIN GROUP (ORDER BY Sub_ID) AS Value, MAX(Currency) AS Currency, LISTAGG(QTY, ',') WITHIN GROUP (ORDER BY Sub_ID) AS QTY, MAX(UOM) AS UOM FROM your_table_name GROUP BY ID;
代码说明
LISTAGG(column, separator) WITHIN GROUP (ORDER BY sort_column):Snowflake中用于将分组内的字段值按指定顺序合并为字符串的函数,这里通过ORDER BY Sub_ID确保合并顺序和原始数据一致MAX(Currency)/MAX(UOM):由于同一ID分组内这两个字段的值完全相同,使用MAX(或MIN)函数即可获取唯一值,避免重复显示
内容的提问来源于stack exchange,提问作者StackFeel
相关产品推荐
相关产品推荐

