表 TB 有欄位 STATUS (1=正確, 0=錯誤),單一查詢取得:總筆數、正確筆數、錯誤筆數。
SELECT SUM(正確數) + SUM(錯誤數) AS 總記錄數,
SUM(正確數) AS 正確數,
SUM(錯誤數) AS 錯誤數
FROM (
SELECT COUNT(1) AS 正確數, 0 AS 錯誤數
FROM TB WHERE STATUS = 1
UNION ALL
SELECT 0 AS 正確數, COUNT(1) AS 錯誤數
FROM TB WHERE STATUS = 0
) a;
SELECT COUNT(1) AS 總記錄數,
SUM(CASE WHEN STATUS = 1 THEN 1 ELSE 0 END) AS 正確數,
SUM(CASE WHEN STATUS = 0 THEN 1 ELSE 0 END) AS 錯誤數
FROM TB;
SUM(CASE WHEN STATUS = 2 THEN 1 ELSE 0 END) AS 待審數。IIF(STATUS=1,1,0) 簡化語法。| 指標 | 方法一 (UNION ALL) | 方法二 (CASE WHEN) |
|---|---|---|
| 掃描次數 | 2 | 1 |
| 邏輯讀取 | ~2x | 1x |
| CPU 時間 | 較高 | 較低 |
| 平行度 | 受限 | 可平行 |
SELECT Category,
COUNT(1) AS 總數,
SUM(CASE WHEN STATUS = 1 THEN 1 ELSE 0 END) AS 正確,
SUM(CASE WHEN STATUS = 0 THEN 1 ELSE 0 END) AS 錯誤
FROM TB
GROUP BY Category;
優先使用 CASE WHEN 條件彙總,單次掃描、語法簡潔、擴充性佳。僅在極舊版本不支援 CASE 時才考慮 UNION ALL 寫法。