oracle行转列,case的用法,表的合并

--列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序
select * from emp e1,
(select round(avg(sal),2) sal,deptno from emp group by deptno) e2 
where e1.sal>e2.sal and e1.deptno=e2.deptno order by e1.deptno asc;


建立test表

--行转列的测试
create table test(
id number primary key,
name varchar2(20),
total number,
quarter varchar2(20)
)
create sequence test_seq increment by 1 start with 1;
insert into test(id,name,total,quarter) values(test_seq.nextval,'奶酪',50,'第一季度');
insert into test(id,name,total,quarter) values(test_seq.nextval,'奶酪',60,'第二季度');
insert into test(id,name,total,quarter) values(test_seq.nextval,'啤酒',50,'第二季度');
insert into test(id,name,total,quarter) values(test_seq.nextval,'啤酒',80,'第四季度');
commit;

select * from test;


select name,
sum(decode(quarter,'第一季度',total,0)) as 第一季度销售额,
sum(decode(quarter,'第二季度',total,0)) as 第二季度销售额,
sum(decode(quarter,'第三季度',total,0)) as 第三季度销售额,
sum(decode(quarter,'第四季度',total,0)) as 第四季度销售额 from test group by name;



case的用法

select name,(case 
when total<60 then '不合格'
when total>=60 and total<80 then '合格'
when total>=80 then '优秀' end
) as 等级 from test;




oracle表的合并

create table t1(
id number primary key,
name varchar2(20),
age number
);
insert into t1(id,name,age) values(1,'A',18);
insert into t1(id,name,age) values(2,'B',20);
insert into t1(id,name,age) values(3,'C',22);
commit;



create table b1(
id number primary key,
name varchar2(20),
score number
);
insert into b1(id,name,score) values(1,'A',78);
insert into b1(id,name,score) values(2,'B',85);
insert into b1(id,name,score) values(3,'D',90);
commit;



合并查询

select t1.name,t1.age,b1.score from t1,b1
where (t1.name=b1.name(+)) 



select b1.name,t1.age,b1.score from t1,b1 
where (t1.name(+)=b1.name)



最后结果

select t1.name,t1.age,b1.score from t1,b1
where (t1.name=b1.name(+)) 
union
select b1.name,t1.age,b1.score from t1,b1 
where (t1.name(+)=b1.name)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值