Oracle表的常用查询实验(五)

Oracle表的常用查询实验(五)

1.问题描述:

test表中有ID(人员编号),A(考核标准),B(实际得分),C(课程编号)四个字段,一个ID可能会有多个科目的评分,如果一个ID中存在A=B,则合格,求合格的人员编号。

2.需求分析:

要得到的结果为:

ID 是否合格

1011 合格

1012 合格

1013 合格

1014 不合格

1015 合格

如果直接用decode()函数,则会出现同一id有合格和不合格的成绩,错误

故合格产品满足以下两个条件:(1)ID不能重复—》distinct (2)同一id存在A=B

3.解答过程:

(1)查出合格的

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)

(2)查出不合格的

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b)

(3)使用union联接

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)union

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b);

4.SQL代码:

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)union

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b);

5.联想扩展:

假设只有A,B两列数据,如果存在A=B,则显示匹配成功(即根据A来判断)

select t3.xx,decode(t3.xx,t3.yy,'success','fail')匹配情况 from

(select*from(selectdistinct A xx fromtest) t1 leftjoin

(selectdistinct A yy fromtestwhere A=B) t2 on t1.xx=t2.yy) t3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值