Bunun gerçekten eski olduğunu biliyorum, ama NULLIF
böyle senaryolar için hileyi seviyorum ve şimdiye kadar hiçbir olumsuzluk bulamadım. Yine de çok pratik olmayan, ancak nasıl kullanılacağını gösteren kopyam ve geçmişe dönük örneğime bakın.
NULLIF
performans üzerinde küçük bir olumsuz etki yaratabilir, ancak sanırım yine de alt sorgulardan daha hızlı olmalıdır.
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
Yorumlar takdir :-)