SQL 将行变成列

SQL turn rows into columns

您好,可以将行值转换为列吗? 我正在使用 ORACLE SQL 并且我想获取月份并将其转换为具有 kpi 值的列,如下所示。 我尝试了分区和合并语句,但似乎没有任何效果。 我真的很感激一些帮助。 提前谢谢你。

输入数据:

department year month kpi value
A 2000 1 sales 5000
A 2000 1 revenue per client 120
A 2000 2 sales 6000
A 2000 2 revenue per client 140

期望的输出:

department year kpi 1 2
A 2000 sales 5000 6000
A 2000 revenue per client 120 140

您可以使用条件聚合:

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;

您可以使用 pivot 这样做:

架构和插入语句:

 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)
 )

输出:

DEPARTMENT YEAR KPI 1 2
A 2000 revenue per client 120 140
A 2000 sales 5000 6000

dbhere