我在工作中遇到了一个问题,即我要生成一个报告来警告订户,如果员工当天有一个任务代码,而另一个没有。例如,如果员工的任务代码为2000,则该天该员工的任务代码也必须为2010或2015。
数据库中的数据如下:
fname | lname | empID | dateworked| taskcode
---------------------------------------------
Jane | Doe | 09836 | 2018-10-1 | 2000
Jane | Doe | 09836 | 2018-10-1 | 2000
Jane | Doe | 09836 | 2018-10-1 | 2010
Arch | Bald | 09825 | 2018-10-1 | 2000
Arch | Bald | 09825 | 2018-10-1 | 2015
Arch | Bald | 09825 | 2018-10-1 | 2000
我不确定如何确定员工是否具有正确的代码,因为它们都在同一列中。我尝试使用t SQL。但是,我对此很陌生。我认为有一种方法可以遍历该列,但是我不确定如何做到这一点。任何帮助将不胜感激!
答案 0 :(得分:0)
使用条件计数。该员工选择当天拥有2000名员工,但没有2010年或2015年员工
SELECT empId, dateworked
FROM YourTable
GROUP BY empId, dateworked
HAVING COUNT( case when taskcode = 2000 THEN 1 END) > 0
AND COUNT( case when taskcode IN (2010,2015) THEN 1 END) = 0
如果希望员工同时使用这两个代码,请在第二个> 0
上使用COUNT
。
答案 1 :(得分:0)
使用以下查询。它查询以得到emp,其中emp仅分配了一个任务代码。让我知道这是否有帮助或您需要解释。
create table temp
(empid int,dateworked date, taskcode int)
insert into temp
values(09836,'2018-10-1',2000),
(09836,'2018-10-1',2000),
(09836,'2018-10-1',2000),
(09825,'2018-10-1',2000),
(09825,'2018-10-1',2015)
select * from temp
select empid,dateworked from temp
group by empid,dateworked
having count(distinct taskcode) = 1