Oracle行列转换
- DDL
create table sale_info (
id number,
product varchar2(20),
quarter varchar2(10),
sales number
);
- 准备数据
insert into sale_info values (1, 'TV', 'Q1', 100);
insert into sale_info values (2, 'TV', 'Q2', 200);
insert into sale_info values (3, 'TV', 'Q3', 300);
insert into sale_info values (4, 'MNT', 'Q1', 50);
insert into sale_info values (5, 'MNT', 'Q2', 150);
insert into sale_info values (6, 'MNT', 'Q3', 200);
。。。
- 转换为如下格式
产品 | Q1 | Q2 | Q3 |
---|
TV | 100 | 200 | 300 |
MNT | 50 | 150 | 200 |
- SQL
select product, sum(decode(a.quarter, 'Q1', a.sales, 0)) Q1,
sum(decode(a.quarter, 'Q2', a.sales, 0)) Q2,
sum(decode(a.quarter, 'Q3', a.sales, 0)) Q3
from sale_info a group by a.product