Я знаю, що це справді старе, але мені подобається NULLIFхитрість для подібних сценаріїв, і я не знайшов жодних недоліків поки. Просто дивіться мій приклад копіювання та вставлення, який не дуже практичний, але демонструє, як ним користуватися.
NULLIF це може дати вам невеликий негативний вплив на продуктивність, але, мабуть, це все-таки має бути швидше, ніж підзапити.
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
Коментарі оцінені :-)