DB/2 で Oracle の DECODE に相当することを書きたいと思ってネットをさまよっていると...
CASE なるものを発見、DECODE よりもはるかに使える!(タイプ量は多いけど)
ちなみに Microsoft では Access の iif に相当すると説明しているけれども、項目1つに対して複数の条件をかけるから、switch か choose に近いかな?
- 既存のコード体系を新しい体系に変換する(DECODE 関数だと2回使用しないといけないけれど1回で書ける)
SELECT count(*), CASE code WHEN 'E' THEN '連邦' WHEN 'Z' THEN 'ジオン' ELSE '中立' END FROM table1 GROUP BY code;
- 異なる条件の集計を一つの SQL で行なう
SELECT SUM(CASE WHEN code = 'E' THEN 1 ELSE 0 END), -- 連邦兵の人数 SUM(CASE WHEN code = 'Z' THEN 1 ELSE 0 END) -- ジオン兵の人数 FROM table1;
Microsoft SQL Server, Oracle, MySQL, PostgreSQL 及び DB/2 で使用できることを確認。ANSI SQL92 で使用できるらしいから、ほとんどの DBMS で使用できるんだろうな。
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。