【发布时间】:2022-01-17 12:29:42
【问题描述】:
我的表:
| Name | Value |
|---|---|
| item_1 | AB |
| item_2 | 2 |
| item_3 | B1 |
| item_1 | CD |
| item_1 | EF |
| item_2 | 3 |
| item_3 | B2 |
| item_4 | ZZ |
需要的输出:
| item_1 | item_2 | item_3 | item_4 |
|---|---|---|---|
| AB | 2 | B1 | ZZ |
| CD | 3 | B2 | NULL |
| EF | NULL | NULL | NULL |
SQL 查询:
with item_1 as (select value from my_table where name = 'item_1'),
item_2 as (select value from my_table where name = 'item_2'),
item_3 as (select value from my_table where name = 'item_3'),
item_4 as (select value from my_table where name = 'item_4')
select item_1.value, item_2.value,item_3.value, item_4.value from item_1 cross join item_2 cross join item_3 cross join item_4;
如果我同时使用 pivot 和 MAX 聚合函数,查询将只显示相应项目的最大值,而不是显示所有值。
有没有什么方法可以在没有交叉连接的情况下将单个列拆分为多个列(使用上面查询中提到的 where 条件)。
【问题讨论】:
-
你怎么知道哪些值是一起的——例如,'3' 与 'CD' 而不是 'EF' 一起;为什么输出中没有“B2”?是否还有另一列您没有显示链接事物(您可以使用它来分组为枢轴)?