trdsql CASE式

Posted on:

CASE式は、プログラム言語のif文やswitch文のような条件に分岐した処理をおこないます。単純な1を’A’に変換するような場合は、一時的なテーブルとJOINさせたり文字列の書き換えで可能ですが、 範囲を指定してグループ化したい場合はCASE式を使うと便利です。

CASE式には以下の2つのパターンどちらも使用できます。

  • CASECASE 式(列) WHEN 値 THEN 結果とCASEの後に式を書いて、WHENが値だけのパターンと
  • CASE WHEN 式 THEN 結果 とCASEの式を省略してWHENに式を書くパターン

必要であれば、ELSE 結果で当てはまらない場合を書き、ENDで式の終わりを示します。

case.csv のようなCSVを使用して、scoreが80以上の場合は’A’、30以上の場合は、‘B’、30より下の場合は、‘F’と表示させてみます。

id,name,score
1,bob,89
2,alice,75
3,dave,23
$ trdsql -ih -oat \
"SELECT id,name,score, " \
"  CASE WHEN CAST(score AS int) >= 80 THEN 'A' " \
"       WHEN CAST(score AS int) >= 30 THEN 'B' " \
"       ELSE 'F' " \
"   END AS evaluation " \
"  FROM case.csv"
+----+-------+-------+------------+
| id | name  | score | evaluation |
+----+-------+-------+------------+
|  1 | bob   |    89 | A          |
|  2 | alice |    75 | B          |
|  3 | dave  |    23 | F          |
+----+-------+-------+------------+

CASE式は書いた先から評価されます。

また式は1つの列をである必要が無いので、WHEN name = 'dave' THEN 'D' という条件を追加することも可能です。