需要您的帮助来获取以下数据的SQL查询
TableName:EMP_DB
EMPID Flag Processing Date
ABC1 yes Current Date
ABC1 No Old Date
DEF1 Yes Current Date
DEF1 No Old Date
GHI1 Yes Old Date
JKL1 yes Current Date
JKL1 No Old Date
我只需要为上面的表选择EMP ID,其中Flag设置为Yes,处理日期是旧Date。 即在上表中每个Emp有2条记录,我需要选择一个员工只有一条记录的记录,其处理日期是旧日期,标志设置为是。
此致 圣
答案 0 :(得分:1)
老实说,你的结构设计看起来非常糟糕。您似乎使用 varchar 来存储布尔概念而不是位。
关于日期,我想你会简化你的问题,但要小心比较日期可能会很棘手。
所以,我要按照说明回答你的问题:
select emp.EMPID
from EMP_DB emp
left join EMP_DB empNo on empNo.EMPID=emp.EMPID and lower(empNo.Flag) = 'No'
where lower(emp.Flag) = 'yes' and emp.[Processing Date] = 'Old Date' and empNo is null
编辑:认真对待其他用户的建议,分享您尝试过的内容。
Edit2:很难理解你的问题,我再次提出了@grantmc的答案。
答案 1 :(得分:1)
我认为这就是你要找的东西?
我解释了这个问题,因为你想确保员工在表格中没有另一条记录,其中标志是" No",所以这个查询会检查它。
SELECT E1.empid
FROM emp_db E1
WHERE lower(E1.flag) = 'yes'
AND E1.[processing date] = 'Old Date'
AND NOT EXISTS (SELECT 'X'
FROM emp_db E2
WHERE E1.empid = E2.empid
AND lower(E2.flag) = 'no')
在您的测试表中,此查询将仅选取ID为GHI1的员工,因为所有其他人都有一个条目,其中flag =" No"
答案 2 :(得分:0)
试试这个:
select distinct EMPID
from EMP_DB
where Flag ='yes'
and Processing Date = 'Old Date'