我有一名员工的员工福利数据。 我在表中有一个名为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)
答案 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)
所以我改变了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
然后,为了显示每位员工只有一条记录(在这种情况下仅限于ALLEN和SMITH),您可以使用:
select t.*
from t4 t
where isenrolled = (select MAX(isenrolled)
from t4
where t4.empno = t.empno)
and ename IN ('ALLEN', 'SMITH')
希望这有帮助
答案 1 :(得分:0)
从员工e中选择唯一(e.empid),其中e2.isenrolled = 1
这将为您提供已注册员工的唯一列表。那是你想要的吗?