Я рекомендую PIVOT
.См. Следующую демонстрацию:
SELECT * INTO #t FROM (
VALUES
(1, 'A'),
(1, 'B'),
(1, 'B'),
(2, 'C'),
(2, 'A'),
(2, 'C'),
(2, 'B')) T([COL 1],[COL 2])
SELECT [COL 1], A [A count], B [B count], C [C count]
FROM #t
PIVOT (COUNT([COL 2]) FOR [COL 2] IN (A,B,C)) P
Результат
COL 1 A count B count C count
----------- ----------- ----------- -----------
1 1 2 0
2 1 1 2