一、建立表:
create table XCN
(
NAME1 VARCHAR2(10),
NAME2 VARCHAR2(10),
NAME3 VARCHAR2(10),
NAME4 VARCHAR2(10)
);
二、插入数据:
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '朋友', '7', '2');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '熟人', '100', '20');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('王二', '敌人', '21', '2');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '家人', '6', '3');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '敌人', '5', '4');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('张三', '朋友', '2', '1');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('张三', '家人', '3', '1');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('张三', '敌人', '1', '0');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('王二', '家人', '22', '4');
三、把纵表转成横表:
select name1,max(case when name2='家人' then name3 else '0' end) 家人1,
max(case when name2='家人' then name4 else '0' end) 家人2,
max(case when name2='敌人' then name3 else '0' end) 敌人1,
max(case when name2='敌人' then name4 else '0' end) 敌人2,
max(case when name2='朋友' then name3 else '0' end) 朋友1,
max(case when name2='朋友' then name4 else '0' end) 朋友2,
max(case when name2='熟人' then name3 else '0' end) 熟人1,
max(case when name2='熟人' then name4 else '0' end) 熟人2
from xcn group by name1;
查询结果为:
NAME1 | 家人1 | 家人2 | 敌人1 | 敌人2 | 朋友1 | 朋友2 | 熟人1 | 熟人2 |
李四 | 6 | 3 | 5 | 4 | 7 | 2 | 100 | 20 |
王二 | 22 | 4 | 21 | 2 | 0 | 0 | 0 | 0 |
张三 | 3 | 1 | 1 | 0 | 2 | 1 | 0 | 0 |
五、OVER (PARTITION BY ..)函数
select name1,name2,name3,name4,row_number() over (partition by name1 order by name1) from xcn ;
查询结果:
NAME1 | NAME2 | NAME3 | NAME4 | ROW_NUMBER()OVER(PARTITIONBYNA |
李四 | 朋友 | 7 | 2 | 1 |
李四 | 熟人 | 100 | 20 | 2 |
李四 | 家人 | 6 | 3 | 3 |
李四 | 敌人 | 5 | 4 | 4 |
王二 | 敌人 | 21 | 2 | 1 |
王二 | 家人 | 22 | 4 | 2 |
张三 | 朋友 | 2 | 1 | 1 |
张三 | 家人 | 3 | 1 | 2 |
张三 | 敌人 | 1 | 0 | 3 |