Вы хотите получить список клиентов, которые имеют только купленных продуктов купленных каждый клиент. Поэтому я думаю, что вы должны помечать все продукты как SoldToAll или нет в подзапросе. Затем вы должны решить, если ваш клиент купил по крайней мере, один из продуктов, помеченных, как SoldToAll = 1, и ни один из продуктов, помеченных, как SoldToAll = 0.
-- Step 1. Flag products as SoldToAll
SELECT
pid
,CASE COUNT(*) = (SELECT COUNT(*) FROM Customer) THEN 1 ELSE 0 END AS SoldToAll
FROM
(SELECT cid,pid
FROM buys
GROUP BY cid,pid
) CustProd
GROUP BY
pid
-- Step 2. Use the above to get list
;WITH Prod AS
(SELECT
pid
,CASE COUNT(*) = (SELECT COUNT(*) FROM Customer) THEN 1 ELSE 0 END AS SoldToAll
FROM
(SELECT cid,pid
FROM buys
GROUP BY cid,pid
) CustProd
GROUP BY
pid)
SELECT
DISTINCT Buys.cid
FROM
Buys
WHERE
pid IN (SELECT pid FROM Prod WHERE SoldToAll = 1)
EXCEPT
SELECT
DISTINCT Buys.cid
FROM
Buys
WHERE
pid IN (SELECT pid FROM Prod WHERE SoldToAll = 0)
, что вы сделали до сих пор? – pedram
И дб схема будет полезно ... – Tatiana
Я пытался пересечь пункты, но без удачи – Dellein