sql两表关联并行列转换
5.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,
只是作为一个格式向大家请教。
table1
月份mon 部门dep 业绩yj
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部门dep 部门名称dname
01 国内业务一部
02 国内业务二部
03 国内业务三部
04 国际业务部
table3 (result)
部门dep 一月份 二月份 三月份
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
create table yj01(
month varchar2(10),
deptno number(10),
yj number(10)
)
insert into yj01(month,deptno,yj) values(‘一月份’,01,10);
insert into yj01(month,deptno,yj) values(‘二月份’,02,10);
insert into yj01(month,deptno,yj) values(‘二月份’,03,5);
insert into yj01(month,deptno,yj) values(‘三月份’,02,8);
insert into yj01(month,deptno,yj) values(‘三月份’,04,9);
insert into yj01(month,deptno,yj) values(‘三月份’,03,8);
create table yjdept(
deptno number(10),
dname varchar2(20)
)
insert into yjdept(deptno,dname) values(01,‘国内业务一部’);
insert into yjdept(deptno,dname) values(02,‘国内业务二部’);
insert into yjdept(deptno,dname) values(03,‘国内业务三部’);
insert into yjdept(deptno,dname) values(04,‘国际业务部’);
分析:两表都有相同字段deptno所以可使用这个字段进行连接,然后根据部门号分组,分组后的select语句只能出现分组字段和聚合函数,聚合函数统计的是分组后,每组内部字段的情况,我们可以在聚合函数里提供自定义字段让其只统计特定的月份即可
SELECT
t2.deptno AS '部门',
sum( CASE WHEN t1.MONTH = '一月份' THEN t1.yj ELSE NULL END ) AS "一月份",
sum( CASE WHEN t1.MONTH = '二月份' THEN t1.yj ELSE NULL END ) AS "二月份",
sum( CASE WHEN t1.MONTH = '三月份' THEN t1.yj ELSE NULL END ) AS "三月份"
FROM
yj01 t1
JOIN yjdept t2 USING ( deptno )
GROUP BY
t2.deptno
```