ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

9.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


例7

履歴表にデータを1行追加します。履歴番号はホスト変数“:RIREKI_NO”の値、利用者はホスト変数“RIYOUSYA”の値、サービスはホスト変数“SERVICE”に対応するコードを割り振るCASE式の結果の値とします。ここでは、ホスト変数“RIREKI_NO”には“6”、“RIYOUSYA”には“USER-C”、“SERVICE”には“宿泊”が設定されているとします。CASE式により、“SERVICE”の値である“宿泊”は4に変換してから履歴表に追加します。

INSERT INTO 履歴表(履歴番号,利用者,サービス)
  VALUES(:RIREKI_NO,:RIYOUSYA,
           CASE WHEN :SERVICE = N'飲食' THEN 1
                   WHEN :SERVICE = N'ショッピング' THEN 2
WHEN :SERVICE = N'公共料金' THEN 3
WHEN :SERVICE = N'宿泊' THEN 4
WHEN :SERVICE = N'交通' THEN 5
WHEN :SERVICE = N'給油' THEN 6
WHEN :SERVICE = N'通販' THEN 7
WHEN :SERVICE = N'移行' THEN 8
ELSE 9 END)