SQLのCASE文をExcelのIF文で表現する
自分で書いた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)
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と同じ事をする
ExcelのA列にSTUDENT_ID, B列にSTUDENT_NAME, C列にGROUP_NUMを出力します。
C2に下の関数を書いて、後は下までオートで埋めれば完成です。
# GROUP_NUM
=IF(AND(0010<=A2,A2<=0013),"1"
,IF(AND(0014<=A2,A2<=0017),"2","0")
)
※Excel自体のセル表示形式(数値、文字列等)がズレていると、求める結果が得られない場合があるので、そこは調整してください。
=IF(条件式, 真の場合, 偽の場合)
条件がもっと多い時は?
条件が増えても、入れ子になった「偽の場合」に随時追加していけばOK。
学生がもっと多くて、こうしたい時、
0010~0013→1班
0014~0017→2班
0018~0021→3班
0022~0025→4班
# 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")
)
)
)
以上
Author And Source
この問題について(SQLのCASE文をExcelのIF文で表現する), 我々は、より多くの情報をここで見つけました https://qiita.com/asasikibu/items/27649e3675aaf705e816著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .