SQL查找多个值困难

SQL查找多个值困难,sql,sql-server,Sql,Sql Server,我正在尝试为项目生成正确的SQL 以下是一个示例数据集: DateTime | EmpID | Function | Location -------------------------------------------------- 1/23/2015 2:00PM | 123 | 1 | 1 1/23/2015 2:10PM | 123 | 2 | 1 1/23/2015 2:20PM | 123 |

我正在尝试为项目生成正确的SQL

以下是一个示例数据集:

DateTime          |  EmpID |  Function  |  Location
--------------------------------------------------
1/23/2015 2:00PM  |  123   |  1         |  1
1/23/2015 2:10PM  |  123   |  2         |  1
1/23/2015 2:20PM  |  123   |  1         |  2
1/23/2015 2:40PM  |  123   |  2         |  2
1/24/2015 2:00PM  |  321   |  1         |  2
1/24/2015 2:15PM  |  321   |  2         |  2
1/24/2015 2:30PM  |  321   |  1         |  3
我需要对functionid=1且location必须同时等于1和2的所有记录进行计数。因此,将返回第一行和第三行,并将其视为计数1


希望我能理解这一点。基本上,我需要知道一名员工在两个地点工作了多少次。任何帮助都将不胜感激。

按EmpId分组并计算位置

SELECT *
  FROM MyTable T1 
 WHERE Function = 1 AND
       NOT EXISTS (SELECT 1 
                     FROM MyTable T2 
                    WHERE T1.EmpId = T2.EmpId AND
                          T1.Function = T2.Function AND
                          T2.Location NOT IN (1, 2))
GROUP BY EmpId
HAVING Count(DISTINCT Location) > 1
但如果您想知道该员工是否在任何两个地点,那么jarlh给出了正确的评论

group by EmpID
having count(distinct location) >= 2

我还没有测试过,但我认为这会起作用

SELECT EmpID, COUNT(EmpID) AS NumOfTimes
From [Table Name] 
WHERE FunctionID = 1 AND (Location = 1 OR Location = 2)
GROUP BY EmpID 
HAVING NumOfTimes = 2

按计数分组(不同位置)>=2如果位置计数为3,这被认为是有效的,但OP只需要1和2,而不是3,如果员工只在位置1呆过几次,而且从未在位置2,则此操作将不起作用。而此代码片段可以解决此问题,确实有助于提高您的帖子质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
SELECT A.EmpID, COUNT(*) 
FROM YOURTABLENAME A 
INNER JOIN YOURTABLENAME B 
ON A.EmpID= B.EmpID
WHERE  A.Location = 1 and B.Location = 2 
and A.Function = B.Function and A.Function = 1
GROUP BY A.EmpID
SELECT EmpID, COUNT(EmpID) AS NumOfTimes
From [Table Name] 
WHERE FunctionID = 1 AND (Location = 1 OR Location = 2)
GROUP BY EmpID 
HAVING NumOfTimes = 2