表:客户
client department
Mike 1
mike 2
mike 3
joe 1
joe 2
bill 1
mary 2
是否可以编写代码,找到仅在部门1或(部门1和2)但不在任何其他部门的客户?在这个例子中,只有乔和账单才是结果。我在退出/不存在时尝试过,但只有在我使用一个部门时才有效。
答案 0 :(得分:2)
是的,您可以使用条件聚合:
SELECT client
FROM yourTable
GROUP BY client
HAVING SUM(CASE WHEN department IN (1, 2) THEN 1 ELSE 0 END) = COUNT(*) AND
SUM(CASE WHEN department = 1 THEN 1 ELSE 0 END) > 0
HAVING
子句的第一部分断言,对于给定的客户端,仅部门1
或2
出现,第二部分确保部门1
至少出现一次。
在这里演示:
答案 1 :(得分:1)
以下是使用max
和min
:
select client
from yourtable t
group by client
having min(department) = 1 and
max(department) in (1,2)
答案 2 :(得分:0)
数据样机:
DECLARE @t TABLE (clientName VARCHAR(20), deptId INT);
INSERT INTO @t
VALUES
('Mike', 1),
('Mike', 2),
('Mike', 3),
('Joe', 1),
('Joe', 2),
('Bill', 1),
('Mary', 2);
除了接近解决方案:
SELECT DISTINCT clientName
FROM @t
WHERE deptId = 1
EXCEPT
SELECT DISTINCT clientName
FROM @t
WHERE deptId > 2;