【发布时间】:2023-02-26 02:06:40
【问题描述】:
假设我有下表。如何旋转三列前缀为部分_每个customer_key 的前 3 个订单?
+--------------+----------+---------------+-------------+----------------+
| CUSTOMER_KEY | PART_KEY | PART_QUANTITY | PART_AMOUNT | TOP_ORDER_RANK |
+--------------+----------+---------------+-------------+----------------+
| 10003 | 98909 | 39 | 74,408.10 | 1 |
| 10003 | 157096 | 49 | 56,501.41 | 2 |
| 10003 | 179085 | 42 | 48,891.36 | 3 |
| 10003 | 179075 | 10 | 28,891.36 | 4 |
+--------------+----------+---------------+-------------+----------------+
预期结果:
+--------------+------------+-----------------+---------------+------------+-----------------+---------------+------------+-----------------+---------------+
| CUSTOMER_KEY | PART_1_KEY | PART_1_QUANTITY | PART_1_AMOUNT | PART_2_KEY | PART_2_QUANTITY | PART_2_AMOUNT | PART_3_KEY | PART_3_QUANTITY | PART_3_AMOUNT |
+--------------+------------+-----------------+---------------+------------+-----------------+---------------+------------+-----------------+---------------+
| 10003 | 98909 | 39 | 74,408.10 | 157096 | 49 | 56,501.41 | 179085 | 42 | 48,891.36 |
+--------------+------------+-----------------+---------------+------------+-----------------+---------------+------------+-----------------+---------------+
示例数据:
WITH t1 AS (
SELECT '10003' AS CUSTOMER_KEY, '98909' AS PART_KEY, 39 AS PART_QUANTITY, 74408.10 AMOUNT, 1 TOP_ORDER_RANK UNION ALL
SELECT '10003' AS CUSTOMER_KEY, '157096' AS PART_KEY, 49 AS PART_QUANTITY, 56501.41 AMOUNT, 2 TOP_ORDER_RANK UNION ALL
SELECT '10003' AS CUSTOMER_KEY, '179085' AS PART_KEY, 42 AS PART_QUANTITY, 48891.36 AMOUNT, 3 TOP_ORDER_RANK UNION ALL
SELECT '10003' AS CUSTOMER_KEY, '179075' AS PART_KEY, 10 AS PART_QUANTITY, 28891.36 AMOUNT, 4 TOP_ORDER_RANK
)
【问题讨论】:
-
没有聚合是什么意思,你想要一行 4 行中的 3 行,所以你必须至少使用一个 GROUP BY 或数据透视表,甚至这有一个聚合 docs.snowflake.com/en/sql-reference/constructs/pivot
-
如果在旋转时确实没有任何重叠记录,那么我建议使用
ANY_VALUE()函数。这按结果选择组中的任何值,并且由于在您的情况下只有 1 个值,因此它比使用 MIN() 或 MAX() 函数执行得更快。但是,正如上面的评论所指出的,您必须使用某种聚合函数。 -
更新了标题。我不确定枢轴函数能否给出预期的结果。如果您有解决方案,请告诉我。 @nbk
标签: sql pivot snowflake-cloud-data-platform aggregate-functions