くろねこ研究所
くろねこの徒然なるサイト
2009年1月 6日(火) 12:03 JST

[SQL]CASE文ってすごいじゃん

  • 2008年11月20日(木) 19:11 JST
  • 投稿者:
  • 閲覧件数
    260

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 で使用できるんだろうな。

トラックバック

このエントリのトラックバックURL:
http://www.blackcatlab.com/trackback.php/ProgramingFAQ_sql00001
表示形式
コメント投稿

コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。