检查同一列中是否存在两个对应的值

时间:2018-10-02 03:44:39

标签: sql sql-server tsql reporting-services

我在工作中遇到了一个问题,即我要生成一个报告来警告订户,如果​​员工当天有一个任务代码,而另一个没有。例如,如果员工的任务代码为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。但是,我对此很陌生。我认为有一种方法可以遍历该列,但是我不确定如何做到这一点。任何帮助将不胜感激!

2 个答案:

答案 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