Sé que esto es muy antiguo, pero me gusta el NULLIF
truco para tales escenarios, y hasta ahora no encontré inconvenientes. Solo vea mi ejemplo de copiar y pegar, que no es muy práctico, pero demuestra cómo usarlo.
NULLIF
podría darle un pequeño impacto negativo en el rendimiento, pero supongo que aún debería ser más rápido que las subconsultas.
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
Comentarios apreciados :-)
SELECT *
, peroSELECT COUNT(*)
, que es una bestia totalmente diferente.