SQL查找多个值困难
我正在尝试为项目生成正确的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 |
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