Wiem, że to naprawdę stare, ale podoba mi się NULLIF
sztuczka w takich scenariuszach i jak dotąd nie znalazłem żadnych wad. Zobacz mój przykład do skopiowania i wklejenia, który nie jest zbyt praktyczny, ale pokazuje, jak go używać.
NULLIF
może mieć niewielki negatywny wpływ na wydajność, ale myślę, że nadal powinno być szybsze niż podzapytania.
DECLARE @tbl TABLE ( id [int] NOT NULL, field [varchar](50) NOT NULL)
INSERT INTO @tbl (id, field)
SELECT 1, 'Manager'
UNION SELECT 2, 'Manager'
UNION SELECT 3, 'Customer'
UNION SELECT 4, 'Boss'
UNION SELECT 5, 'Intern'
UNION SELECT 6, 'Customer'
UNION SELECT 7, 'Customer'
UNION SELECT 8, 'Wife'
UNION SELECT 9, 'Son'
SELECT * FROM @tbl
SELECT
COUNT(1) AS [total]
,COUNT(1) - COUNT(NULLIF([field], 'Manager')) AS [Managers]
,COUNT(NULLIF([field], 'Manager')) AS [NotManagers]
,(COUNT(1) - COUNT(NULLIF([field], 'Wife'))) + (COUNT(1) - COUNT(NULLIF([field], 'Son'))) AS [Family]
FROM @tbl
Komentarze mile widziane :-)