从表中选择唯一的行 - ORACLE

时间:2010-11-30 18:30:06

标签: sql oracle

我有一名员工的员工福利数据。 我在表中有一个名为isenrolled的字段,如果字段为1表示员工已注册福利,而字段为0表示未注册。 我的问题是我有一个员工的多个recs,这意味着Scott有两个isenrolled = 1和isenrolled = 0的条目。 我想只选择SCOTT的一个rec,其中他的isenrolled = 1并且拒绝那个isenrolled = 0的那个,这样我只会为已注册且未注册的员工获得唯一的rec。我如何选择这些员工?我尝试了下面的qry,它不起作用

select * FROM  employee e 
WHERE e.empid not IN( SELECT empid FROM employee  e2
WHERE e2.isenrolled =1)

2 个答案:

答案 0 :(得分:1)

首先我使用以下方法设置一些测试数据:

create table t4
as select * from scott.emp

alter table t4 add (isenrolled number(10))

update t4
set isenrolled = 0

insert into t4
(select emp.*, 1
from scott.emp)

此时t4表现在每个员工有两条记录(一个是isenrolled = 0,另一个是isenrolled = 1) alt text

所以我改变了ALLEN的数据,所以他“选择”了

delete from t4
where ename = 'ALLEN'
and isenrolled = 1

此查询显示ALLEN(1条记录)和SMITH(2条记录)

的数据
select *
from t4
where ename IN ('ALLEN', 'SMITH')
order by ename

alt text

然后,为了显示每位员工只有一条记录(在这种情况下仅限于ALLEN和SMITH),您可以使用:

select t.*
from t4 t
where isenrolled = (select MAX(isenrolled)
                    from t4
                    where t4.empno = t.empno)
and ename IN ('ALLEN', 'SMITH')

alt text

希望这有帮助

答案 1 :(得分:0)

从员工e中选择唯一(e.empid),其中e2.isenrolled = 1

这将为您提供已注册员工的唯一列表。那是你想要的吗?