LoginSignup
0
1

More than 3 years have passed since last update.

SQLのCASE文をExcelのIF文で表現する

Posted at

自分で書いたSQL文を自分でテストするときに、別途同じテストデータでExcel使って作っておいたアンサー値と、実際にSQLを実行して取り出してきた値とを比較するってことがあります。

出来る先輩は簡単におっしゃるんだ。
「エクセルで答え作っといて!それと比べれば良いから!」

「はい、わかりました(エクセルでどうやって作るねん)」

エクセルのやり方を先輩に質問するのはさすがに忍びないので、自分でなんとかします。今回はCASE文と同じ処理を表現します。IF文の入れ子でやります。

SQLのCASE文で付与した値が、例えばGROUP BYのキーになっていたりする場合、エクセルで表現するにはIF条件分岐で作業列を作ってから、ピボットするなりして模擬実行結果を作ります。

SQLのCASE文例

例えば、
「学生番号, 名前, ……」のCSVファイルがあります。

▼テーブル名:KOHUN_ASUKA_CLASS

学生番号(列名:STUDENT_ID) 名前(列名:STUDENT_NAME)
0010 卑弥呼
0011 蘇我馬子
0012 聖徳太子
0013 小野妹子
0014 中臣鎌足
0015 中大兄皇子
0016 天武天皇
0017 仁徳天皇

修学旅行に行くので、1班・2班に分けたいと思います。
学生番号が0010~0013が1班、
0014~0017なら2班にすることにしました(列名:GROUP_NUM)

CASE.sql
SELECT
    STUDENT_ID,
    STUDENT_NAME,
    CASE
        WHEN STUDENT_ID BETWEEN '0010' AND '0013' THEN '1'
        WHEN STUDENT_ID BETWEEN '0014' AND '0017' THEN '2'
        ELSE '0'
    END AS GROUP_NUM
FROM
    KOHUN_ASUKA_CLASS

▼実行結果

STUDENT_ID STUDENT_NAME GROUP_NUM
0010 卑弥呼   1  
0011 蘇我馬子 1  
0012 聖徳太子 1  
0013 小野妹子 1  
0014 中臣鎌足 2  
0015 中大兄皇子 2  
0016 天武天皇 2  
0017 仁徳天皇 2  

Excelの条件分岐でCASEと同じ事をする

WS000014.JPG

ExcelのA列にSTUDENT_ID, B列にSTUDENT_NAME, C列にGROUP_NUMを出力します。
C2に下の関数を書いて、後は下までオートで埋めれば完成です。

IF.xlsx
# GROUP_NUM
=IF(AND(0010<=A2,A2<=0013),"1"
    ,IF(AND(0014<=A2,A2<=0017),"2","0")
    )

WS000017.JPG

※Excel自体のセル表示形式(数値、文字列等)がズレていると、求める結果が得られない場合があるので、そこは調整してください。

WS000016.JPG

IF関数の引数_Excel
=IF(条件式, 真の場合, 偽の場合)

条件がもっと多い時は?

条件が増えても、入れ子になった「偽の場合」に随時追加していけばOK。

学生がもっと多くて、こうしたい時、
0010~0013→1班
0014~0017→2班
0018~0021→3班
0022~0025→4班

IF_2.xlsx
# GROUP_NUM
=IF(AND(0010<=A2,A2<=0013),"1"
    ,IF(AND(0014<=A2,A2<=0017),"2"
        ,IF(AND(0018<=A2,A2<=0021),"3"
            ,IF(AND(0022<=A2,A2<=0025),"4","0")
           )
       )
   )

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1