ฉันรู้ว่ามันเก่าจริง ๆ แต่ฉัน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
ความเห็นชื่นชม :-)