找出包含 A and B 但是不包含 C 的CustomerID
找到包含 A and B 但是不包含 C 的CustomerID
查找ProductCode 有 A 并且有B 的CustomerID
但是不能有C
例如下面的一些数据
CustomerID ProductCode
1 A
1 B
2 A
2 B
2 D
3 A
3 B
3 D
3 A
3 D
4 A
4 B
4 C
5 A
5 B
5 A
5 B
5 C
5 D
6 A
6 A
6 D
6 E
7 B
7 B
7 D
7 E
结果应该是
CustomerID
1
2
3
------最佳解决方案--------------------
------其他解决方案--------------------
------其他解决方案--------------------
select customerid
from TB
where productcode in ('A','B') and productcode <>'C'
group by customerid
having COUNT(1)=2
------其他解决方案--------------------
这个肯定不对了
------其他解决方案--------------------
也不对,谢谢了
------其他解决方案--------------------
查找ProductCode 有 A 并且有B 的CustomerID
但是不能有C
例如下面的一些数据
CustomerID ProductCode
1 A
1 B
2 A
2 B
2 D
3 A
3 B
3 D
3 A
3 D
4 A
4 B
4 C
5 A
5 B
5 A
5 B
5 C
5 D
6 A
6 A
6 D
6 E
7 B
7 B
7 D
7 E
结果应该是
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
------其他解决方案--------------------
select customerid
from TB
where productcode in ('A','B') and productcode <>'C'
group by customerid
having COUNT(1)=2
------其他解决方案--------------------
这个肯定不对了
------其他解决方案--------------------
也不对,谢谢了
------其他解决方案--------------------