首页 > 解决方案 > 在雪花的 PIVOT 期间保持多行

问题描述

我想将行转换为雪花中的列。

假设我有下表 BASE

ID 价值 类型
1 100 '一个'
1 200 '乙'
1 300 '乙'
2 400 '一个'

输出应如下所示:

ID 一个
1 100 200
1 100 300
2 400 无效的

目前我正在用

SELECT ID,
CASE WHEN TYPE = 'A' THEN VALUE ELSE NULL AS A,
CASE WHEN TYPE = 'B' THEN VALUE ELSE NULL AS B
FROM BASE

目前缺少 GROUP BY 语句。通常我会按 ID 分组,但这并不能说明在相同的 TYPE 和 ID 上为每个值保留一行。

任何想法如何实现这一目标?

干杯,P

标签: sqlpivotsnowflake-cloud-data-platform

解决方案


您可以使用条件聚合。您可以使用row_number()获取多行:

SELECT ID,
       MAX(CASE WHEN TYPE = 'A' THEN VALUE END) AS A,
       MAX(CASE WHEN TYPE = 'B' THEN VALUE END) AS B
FROM (SELECT B.*,
             ROW_NUMBER() OVER (PARTITION BY ID, TYPE ORDER BY VALUE) as seqnum
      FROM BASE B
     ) B
GROUP BY ID, seqnum;

推荐阅读