こんにちは!kossyです!
さて、今回はRailsでSQL直書きでCASE文を書いてみたので、ブログに残してみたいと思います。
例
ごくごく簡単な例を書いてみました。
scope :listed_employees, -> () { query = <<-SQL SELECT id, retired_at, CASE WHEN retired_at IS NULL THEN last_name || first_name ELSE last_name || first_name || '(退職済み)' END as name FROM employees ORDER BY id ASC SQL find_by_sql(query) }
retired_atがNULLでなければ、名前の最後に(退職済み)と記載するようにしています。
そしてヒアドキュメントで書いたクエリをfind_by_sqlメソッドで呼び出しています。
次はフラグをつける例です。
scope :added_retired_flag_employees, -> () { query = <<-SQL SELECT id, retired_at, CASE WHEN retired_at IS NULL THEN 0 ELSE 1 END as retire_flag FROM employees ORDER BY id ASC SQL find_by_sql(query) }
retired_atがnullなら0を、nullでなければ1を出力しています。
このように、CASE文でフラグをつけるような使い方もできます。
勉強になりました。