There's lots of ways of doing this, here's another
SELECT CustID
FROM product_details
WHERE ProdId = 1
INTERSECT
SELECT CustID
FROM product_details
WHERE ProdId = 4
EXCEPT
SELECT CustID
FROM product_details
WHERE ProdId = 0;
Also this
WITH Summary AS (
SELECT CustID,
SUM(CASE WHEN ProdId = 0 THEN 1 ELSE 0 END) AS NumProdId0,
SUM(CASE WHEN ProdId = 1 THEN 1 ELSE 0 END) AS NumProdId1,
SUM(CASE WHEN ProdId = 4 THEN 1 ELSE 0 END) AS NumProdId4
FROM product_details
GROUP BY CustID)
SELECT CustID
FROM Summary
WHERE NumProdId0=0 AND NumProdId1>0 AND NumProdId4>0;
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537