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

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

 

1.问题描述:

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

 Oracle表的常用查询实验(五)_第1张图片

2.需求分析:

要得到的结果为:

ID     是否合格

1011   合格

1012   合格

1013   合格

1014   不合格

1015   合格

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

Oracle表的常用查询实验(五)_第2张图片

故合格产品满足以下两个条件:(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);

 Oracle表的常用查询实验(五)_第3张图片

 

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

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

Oracle表的常用查询实验(五)_第4张图片

你可能感兴趣的:(oracle,distinct,decode)