假设我有一张table T
其条目如下:
id | type | value |
-------------------------
1 | A | 7
1 | B | 8
2 | A | 9
2 | B | 10
3 | A | 11
3 | B | 12
1 | C | 13
2 | C | 14
对于每种类型,我需要一个不同的列。由于类型的数量是详尽的,我希望所有不同的类型被枚举,并为每个相应的列。我想做点什么 id
表的主键。
所以,期望的输出是这样的:
id | A's value | B's value | C's value
------------------------------------------
1 | 7 | 8 | 13
2 | 9 | 10 | 14
3 | 11 | 12 | NULL
请注意,这是一个简化版本。实际表格 T
是从一个更大的表中派生出来的 group by
. 对于每个小组,我想要一个单独的专栏。这有可能吗?
2条答案
按热度按时间alen0pnh1#
使用条件聚合:
x7rlezfr2#
我建议查看pivot函数:
https://docs.snowflake.com/en/sql-reference/constructs/pivot.html
不过,这个函数的主要障碍是pivot\u列的值列表需要预先确定。为此,我通常使用listag函数:
https://docs.snowflake.com/en/sql-reference/functions/listagg.html
我在下面提供了一个查询,向您展示了如何构建该字符串,在类似python的脚本中甚至在存储过程中一起实现这一点应该相当简单(构建pivot\u列、构建aggregate/pivot命令、执行aggregate/pivot命令)。
我希望这有助于…rich