Прежде всего, вам лучше убедиться, что вам разрешено хранить SSN, поскольку существует целый ряд законов и положений о конфиденциальности, которые могут запрещать это.
Запрос будет выглядеть так:
SELECT z.State, COUNT(DISTINCT o.SSN) AS SsnCount
FROM ZipLookup z
INNER JOIN Orders o
ON o.ZipCode = z.ZipCode
GROUP BY z.State
Если вам нужно только считать SSN в его наиболее часто используемом состоянии:
WITH StateSSNs AS
(
SELECT
o.SSN, z.State,
ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS RowNum
FROM Orders o
INNER JOIN ZipLookup z
ON z.ZipCode = o.ZipCode
GROUP BY o.SSN, z.State
)
SELECT z.State, COUNT(*) AS SsnCount
FROM ZipLookup z
INNER JOIN StateSSNs s
ON s.State = z.State
WHERE s.RowNum = 1
GROUP BY z.State
Производительность не будет очень хорошей, я думаю, что для этого потребуется как минимум одно полное сканирование и, возможно, два, но если вы хотите что-то лучше, вам нужно нормализовать схему.