Symfoware Parallel Server SQLビギナーズガイド
目次 索引 前ページ次ページ

第6章 いろいろなデータ操作の方法

6.5 CASE式を使用してデータを操作する

CASE式は、列の値に応じて結果列の値の変更、取り出す列の優先付けをすることができます。また、場合分けをして、それぞれに対応した値に設定することもできます。

CASE式の使用例を以下に示します。

例1

履歴表から、利用者ごとに利用したサービスの回数を求めます。

SELECT 利用者,COUNT(CASE WHEN サービス     = 1
                       THEN サービス     ELSE NULL END) AS サービス1
               ,COUNT(CASE WHEN サービス     = 2
                        THEN サービス     ELSE NULL END) AS サービス2
               ,COUNT(CASE WHEN サービス     = 3
                        THEN サービス     ELSE NULL END) AS サービス3
     FROM 履歴表
     GROUP BY 利用者

例2

ポイント表から、ポイントに応じて記号(PLATINUM、GOLDまたはSILVER)を付加した利用者、ポイントを求めます。
    SELECT 利用者,合計ポイント,
      CASE WHEN 合計ポイント >= 50000 THEN 'PLATINUM'
             WHEN 合計ポイント >= 10000 THEN 'GOLD'
             WHEN 合計ポイント >= 3000  THEN 'SILVER'
        ELSE       NULL END AS ランク

       FROM ポイント表

例3

利用者表から、EMAILアドレス、TEL番号、住所の優先順で最初の設定のある項目を求めます。
SELECT 利用者,CASE WHEN EMAIL  IS NOT NULL THEN EMAIL
                    WHEN TEL    IS NOT NULL THEN TEL
                    ELSE                             住所 END AS 連絡先
   FROM 利用者表

例4

ポイント表から、次のランクのポイントにあと500ポイントで到達する利用者の利用者とポイントを求めます。それぞれのランクは、SILVERが3000ポイント、GOLDが10000ポイント、PLATINUMが50000ポイントとします。
SELECT 利用者,合計ポイント FROM  ポイント表
  WHERE ポイント >= CASE WHEN ポイント <= 3000 THEN 2500
                         WHEN ポイント <=10000 THEN 9500
                         WHEN ポイント <=50000 THEN 49500 END

例5

履歴表から、利用したサービスをグループ化してグループごとの総利用回数を求めます。
SELECT サービスグループ, COUNT(*)  AS 総利用回数
 FROM 履歴表
 GROUP BY   CASE WHEN サービス     IN (1,4,7) THEN 'サービスグループ1'
                 WHEN サービス     IN (2,5,8) THEN 'サービスグループ2'
                 ELSE 'サービスグループ3'   END  AS サービスグループ

例6

履歴表に記述されたサービス記号を変更します。
    UPDATE 履歴表
      SET サービス =   CASE WHEN サービス  =  1  THEN  111
                            WHEN サービス  =  2  THEN  222
                            WHEN サービス  =  3  THEN  333
                            ELSE 999                        END
 


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006