Symfoware(R) 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 利用者 

image

 

例2

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

  FROM ポイント表

image

 

例3

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

image

 

例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  

image

 

例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 サービスグループ

image

 

例6

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

image


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

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