Symfoware Server SQLビギナーズガイド - FUJITSU - |
目次 索引 |
第6章 いろいろなデータ操作の方法 |
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
目次 索引 |