CASE WHEN を使って条件ごとに振り分けて件数をそれぞれの件数を取得します。
CASE WHEN を使って条件ごとの件数を取得する
あるテーブルに状態を表すフラグを持たせることはよくあります。
その状態を条件ごとに振り分けて件数をそれぞれの件数を取得します。
条件は0が未処理、1が正常終了、2が異常終了
条件は0が未処理、1が正常終了、2が異常終了です。
表示内容は
- 未処理の件数
- 処理済みの件数
- 正常終了の件数
- 異常終了の件数
- すべての件数
です。
CREATE TABLE test_table
(
no INT --レコードのキー
,chk INT --処理の状態
)
--chk=0->未処理、chk=1->正常chk=2->異常
INSERT INTO test_table VALUES( 1, 0 )
INSERT INTO test_table VALUES( 2, 1 )
INSERT INTO test_table VALUES( 3, 2 )
INSERT INTO test_table VALUES( 4, 0 )
INSERT INTO test_table VALUES( 5, 1 )
INSERT INTO test_table VALUES( 6, 1 )
INSERT INTO test_table VALUES( 4, 0 )
INSERT INTO test_table VALUES( 5, 1 )
INSERT INTO test_table VALUES( 6, 1 )
SELECT
SUM(CASE WHEN chk=0 THEN 1 END) AS 未処理
,SUM(CASE WHEN chk=1 OR chk=2 THEN 1 END) AS 処理済
,SUM(CASE WHEN chk=1 THEN 1 END) AS 正常
,SUM(CASE WHEN chk=2 THEN 1 END) AS 異常
,SUM(1) AS 全件
FROM
test_table
DROP TABLE test_table
処理結果は
| 未処理 | 処理済 | 正常 | 異常 | 全件 |
|---|---|---|---|---|
| 3 | 6 | 5 | 1 | 9 |
です。
