Oracle Pivot:从行到列

bqujaahr  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(131)

你好是可以把行值变成列。我使用的是ORACLE SQL,我想将月份转换为具有kpi值的列,如下所示。我尝试了分区和合并语句,但似乎都不起作用。我真的很感激你的帮助。先谢谢你。
输入数据:
| 部门|年|月份|KPI|价值|
| --------------|--------------|--------------|--------------|--------------|
| 一个|二千年|1|销售|五千|
| 一个|二千年|1|每个客户的收入|一百二十|
| 一个|二千年|二|销售|六千|
| 一个|二千年|二|每客户收入|一百四十|
预期输出:
| 部门|年|KPI| 1|二|
| --------------|--------------|--------------|--------------|--------------|
| 一个|二千年|销售|五千|六千|
| 一个|二千年|每客户收入|一百二十|一百四十|

cwtwac6a

cwtwac6a1#

您可以使用pivot来执行以下操作:
Schema和insert语句:

create table mytable (department varchar(20),year int,month int,kpi varchar(50),value int);

 insert into mytable values('A',    2000,   1,  'sales' ,5000);
 insert into mytable values('A',    2000,   1,  'revenue per client',   120); 
 insert into mytable values('A',    2000,   2,  'sales' ,6000);
 insert into mytable values('A',    2000,   2,  'revenue per client',   140);

查询:

select * from (
 select department,year,month,kpi,value
 from mytable
 )
 pivot
 (
     max(value)
     for month  in (1,2)
 )

输出:
| 联系方式|年份|KPI| 1|二|
| --------------|--------------|--------------|--------------|--------------|
| 一个|二千年|每客户收入|一百二十|一百四十|
| 一个|二千年|销售|五千|六千|

fwzugrvs

fwzugrvs2#

您可以使用条件聚合:

select department, year, kpi,
       max(case when month = 1 then value end) as month_1,
       max(case when month = 2 then value end) as month_2
from t
group by department, year, kpi;

相关问题