日期:2014-05-17  浏览次数:20395 次

找到包含 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
------最佳解决方案--------------------
--> 测试数据:#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
------其他解决方案--------------------
引用:
SQL code
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

也不对,谢谢了
------其他解决方案--------------------
引用: