找到包含 A and B 但是不包含 C 的CustomerID
查找ProductCode 有 A 并且有B 的CustomerID
但是不能有C
例如下面的一些数据
CustomerIDProductCode
1A
1B
2A
2B
2D
3A
3B
3D
3A
3D
4A
4B
4C
5A
5B
5A
5B
5C
5D
6A
6A
6D
6E
7B
7B
7D
7E
结果应该是
CustomerID
1
2
3
[最优解释]
--> 测试数据:#tb
IF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL DROP TABLE #tb
GO
CREATE TABLE #tb([CustomerID] INT,[ProductCode] VARCHAR(1))
INSERT #tb
SELECT 1,'A' UNION ALL
SELECT 1,'B' UNION ALL
SELECT 2,'A' UNION ALL
SELECT 2,'B' UNION ALL
SELECT 2,'D' UNION ALL
SELECT 3,'A' UNION ALL
SELECT 3,'B' UNION ALL
SELECT 3,'D' UNION ALL
SELECT 3,'A' UNION ALL
SELECT 3,'D' UNION ALL
SELECT 4,'A' UNION ALL
SELECT 4,'B' UNION ALL
SELECT 4,'C' UNION ALL
SELECT 5,'A' UNION ALL
SELECT 5,'B' UNION ALL
SELECT 5,'A' UNION ALL
SELECT 5,'B' UNION ALL
SELECT 5,'C' UNION ALL
SELECT 5,'D' UNION ALL
SELECT 6,'A' UNION ALL
SELECT 6,'A' UNION ALL
SELECT 6,'D' UNION ALL
SELECT 6,'E' UNION ALL
SELECT 7,'B' UNION ALL
SELECT 7,'B' UNION ALL
SELECT 7,'D' UNION ALL
SELECT 7,'E'
--------------开始查询--------------------------
SELECT CustomerID
FROM #tb
WHERE ProductCode IN ('A', 'B')
GROUP BY CustomerID
HAVING COUNT(DISTINCT ProductCode) = 2
EXCEPT
SELECT CustomerID
FROM #tb
WHERE ProductCode = 'C'
----------------结果----------------------------
/*
* CustomerID
1
2
3
*/
SELECT CustomerID
FROM [t]
WHERE ProductCode IN ('A','B')
GROUP BY CustomerID