Tôi biết điều này thực sự cũ, nhưng tôi thích NULLIF
thủ thuật cho các kịch bản như vậy và cho đến nay tôi không tìm thấy nhược điểm nào. Chỉ cần xem bản sao và ví dụ có thể dán của tôi, tuy không thực tế lắm, nhưng trình bày cách sử dụng nó.
NULLIF
có thể cung cấp cho bạn một tác động tiêu cực nhỏ đến hiệu suất, nhưng tôi đoán nó vẫn phải nhanh hơn các truy vấn con.
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
Nhận xét đánh giá cao :-)