Names of people shopping in A and B (and possibly elsewhere):
SELECT name
FROM yourTable
GROUP BY name
HAVING SUM(CASE WHEN Store = 'A' THEN 1 END) > 0 AND
SUM(CASE WHEN Store = 'B' THEN 1 END) > 0
Names of people with A or B (but not others):
SELECT name
FROM yourTable
GROUP BY name
HAVING (SUM(CASE WHEN Store = 'A' THEN 1 END) > 0 OR
SUM(CASE WHEN Store = 'B' THEN 1 END) > 0) AND
SUM(CASE WHEN Store NOT IN ('A', 'B') THEN 1 END) = 0
Names of people who buy only on A and B:
SELECT name
FROM yourTable
GROUP BY name
HAVING SUM(CASE WHEN Store = 'A' THEN 1 END) > 0 AND
SUM(CASE WHEN Store = 'B' THEN 1 END) > 0 AND
COUNT(DISTINCT Store) = 2
Names of people who buy only at store D:
SELECT name
FROM yourTable
GROUP BY name
HAVING SUM(CASE WHEN Store <> 'D' THEN 1 END) = 0
The demo for the second request is here:
source
share