Я знаю, що це справді старе, але мені подобається 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
Коментарі оцінені :-)