SQL Pivot - 查询结果垂直到水平
Posted
技术标签:
【中文标题】SQL Pivot - 查询结果垂直到水平【英文标题】:SQL Pivot - Query Result vertical to horizontal 【发布时间】:2021-04-06 17:53:18 【问题描述】:问题描述:
我有一个当前三行的表(例如)。目标是有一个选择,最终会带给我employee_id、val_x、val_y,而x 和y 取决于month_nr:
CREATE TABLE test(
employee_id NUMBER
,month_nr NUMBER
,val NUMBER
);
insert into test values (5,1,15);
insert into test values (15,1,60);
insert into test values (5,2,20);
基本上结果应该是这样的:
Employee ID | Val Seq 1 | Val Seq 2 |
---|---|---|
5 | 15 | 20 |
15 | 60 | null |
是否需要枢轴 SQL 或是否有其他优雅的方法来解决此请求?枢轴 SQL 的外观如何?
感谢您的帮助!
【问题讨论】:
【参考方案1】:我可能会选择pivot
,除非您碰巧需要支持真正旧版本的 Oracle。但是你也可以用条件聚合做一些老派的事情
select employee_id,
max( case when month_nr = 1 then val else null end ) val_1,
max( case when month_nr = 2 then val else null end ) val_2
from test
group by employee_id
【讨论】:
感谢贾斯汀,您的“旧”解决方案运行良好。然而,我仍然会选择“pivot”版本,因为我不必支持旧的 Oracle 版本。【参考方案2】:使用PIVOT
:
SELECT *
FROM test
PIVOT (
MAX( val )
FOR month_nr IN (
1 AS Val_Seq_1,
2 AS Val_Seq_2
)
)
ORDER BY employee_id;
哪些输出:
员工 ID | VAL_SEQ_1 | VAL_SEQ_2 ----------: | --------: | --------: 5 | 15 | 20 15 | 60 | 空
db小提琴here
【讨论】:
非常感谢您的完美回答@MT0!反响很好!以上是关于SQL Pivot - 查询结果垂直到水平的主要内容,如果未能解决你的问题,请参考以下文章
SQL 中的 Pivot 语法错误,为啥我得到不正确的结果?