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

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

6.7 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

利用者表から、メールアドレス、TEL番号、住所の優先順で最初の設定のある項目を求めます。
SELECT 利用者,CASE WHEN メール IS NOT NULL THEN メール
                   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) 富士通株式会社 2007