您的位置:首页 > 数据库 > Oracle

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

2013-11-21 08:32 501 查看

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);

或者

SELECT 'yes',ID FROM TEST WHERE A=BGROUP BY ID ORDER BY ID

SELECT 'no',ID FROM TEST WHERE ID NOT IN (SELECT ID FROM TEST WHERE A=B) GROUP BY ID ORDER BY ID

 

5.联想扩展:

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

select t3.xx,decode(t3.xx,t3.yy,'success','fail')匹配情况from
(select*from(selectdistinct
A xx fromtest) t1leftjoin
 (selectdistinct
A  yy fromtestwhere A=B)
t2 on t1.xx=t2.yy)
t3

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle decode distinct