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表的常用查询实验(六)
- Oracle表的常用查询实验(七)
- Oracle表的常用查询实验(八)
- Oracle表的常用查询实验(四)
- Oracle表的常用查询实验(二)
- Oracle表的常用查询实验(一)
- Oracle表的常用查询实验(一)
- Oracle表的常用查询实验(三)
- 查询oracle 10g下一些常用的端口
- ORACLE-用户常用数据字典的查询使用方法
- oracle中常用经典sql查询语句。
- Oracle常用查询(持续更新中...)
- oracle 查询上机实验
- Oracle常用经典SQL查询(二)
- oracle数据库常用的99条查询语句
- ORACLE用户常用数据字典的查询使用方法
- Oracle用户常用数据字典查询
- [转帖]Oracle 常用SQL查询语句
- oracle常用查询日期,一天,前一周,前一个月
- ORACLE备份、恢复、常用查询