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
	```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值