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
您好,可以将行值转换为列吗? 我正在使用 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 |
db