在多个条件下计数

时间:2011-04-05 16:36:38

标签: sql

我认为这本来很容易,但我错过了一些东西。

这是我的数据:

ID       EMPID    Index1
314      021576   5
315      021576   2
317      021576   8
318      021576   12
500      021576   398
501      021576   388
502      021111   4
503      021111   8 

这是我的SQL语句。

SELECT COUNT(DISTINCT EmpID) AS Expr1
    FROM ProfileData
    WHERE (Index1ID = 2) AND (Index1ID = 5)

我正在尝试计算总数为1

2 个答案:

答案 0 :(得分:3)

(Index1ID = 2) AND (Index1ID = 5)

是一个始终返回false的where子句。如果你的意思是OR,它仍然无效,因为它会返回2.

答案 1 :(得分:2)

我的猜测是,您想知道同时包含EMPID值为2且Index1值为5(Index1ID 021576的行的EMPID值的数量。 ,EMPID 021111既没有)。有多种方法可以做到这一点

使用设置操作

SELECT COUNT(DISTINCT empid)
  FROM (SELECT empid
          FROM ProfileData
         WHERE Index1ID = 2 
        INTERSECT
        SELECT empid
          FROM ProfileData
         WHERE Index1ID = 5)

或使用GROUP BY

SELECT COUNT(DISTINCT empid)
  FROM (SELECT empid, COUNT(DISTINCT Index1ID) cnt
          FROM ProfileData
         WHERE Index1ID IN (2,5)
         GROUP BY empid)
 WHERE cnt = 2

如果您想要与EMPID值相关联的Index1ID值列表,那么使用HAVING子句会更容易

SELECT empid, COUNT(DISTINCT Index1ID)
  FROM ProfileData
 WHERE Index1ID IN (2,5)
 GROUP BY empid
HAVING COUNT(DISTINCT Index1ID) = 2