Another way: P in SQL Server 2012+.
SELECT FIRST,LAST,FOOD FROM(
SELECT A.FIRST,A.LAST,B.FOOD,
COUNT(*) OVER (PARTITION BY A.FIRST,A.LAST ORDER BY A.FIRST,A.LAST DESC) AS 'POS'
FROM TEST_FOOD A
INNER JOIN TEST_FOOD B
ON A.FIRST = B.FIRST
AND A.LAST = B.LAST
WHERE A.FOOD = 'PIZZA') TB WHERE POS = 2
And an even more standard way in SQL Server 2005+, the first one is faster, but limited to the MSSQL version.
SELECT C.FIRST,C.LAST,C.FOOD FROM
(
SELECT A.FIRST,A.LAST FROM TEST_FOOD A
INNER JOIN TEST_FOOD B
ON A.FIRST = B.FIRST
AND A.LAST = B.LAST
WHERE B.FOOD = 'PIZZA'
GROUP BY A.FIRST,A.LAST
HAVING COUNT(*) = 2
) TB INNER JOIN
TEST_FOOD C
ON TB.FIRST = C.FIRST
AND TB.LAST = C.LAST
source
share