SQL Server には、クエリ内の値に対してリアルタイムのプログラム ロジックを実行できるというユニークな機能があります。
CASE ステートメントの使用
これは、SQL Server のすべてのバージョンにおいて、CASE
IF...THEN...ELSE
論理式として動作し、結果に応じてさまざまな値を返します。
以下の例では、本の舞台が中つ国なのか普通の地球なのかを指定する追加の locale
列を返したいとします。
SELECT CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth' END AS locale, books.*FROM books
このステートメントの特別な CASE
CASE
CASE
SELECT
ステートメントであることに気づきましょう。
SELECT books.*FROM books
それでは、CASE
セクションがどのように構成されているのか、どのような論理的動作を行っているのかを調べてみましょう。
CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth'END AS locale
まず、CASE
WHEN
CASE
books.title
books.primary_author
THEN
は値「Middle-earth」を返します。 どちらのフィールドも検索にマッチしない場合は、代わりに「地球」という値を返します。
ロジックを擬似コードの IF...THEN...ELSE
ステートメントとして再構成すると、単に SQL に評価を求めていることになります。
IF title == 'The Hobbit' OR primary_author == 'Tolkien'THEN RETURN 'Middle-earth'ELSE RETURN 'Earth'END
最後に、CASE
END
ステートメントを最後に付け加えなければならないことを覚えておくことが重要です。
IIF関数の使用
もしあなたがより新しいバージョンのSQLを使用しているのであれば、SQL Server 2012では非常に便利なIIF
IIF
IF...ELSE
CASE
ステートメントを実行し、その結果の評価に応じて2つの値のうちの1つを返すための省略法です。
上記の例でIIF
を使用するように再構築するのは非常に簡単です。
SELECT IIF( books.title = 'The Hobbit' OR books.primary_author = 'Tolkien', 'Middle-earth', 'Earth') AS locale, books.*FROM books
IIF
CASE
ステートメントの構文の多くを、引数を区別するためのいくつかの単純なカンマ セパレータに置き換えることができます。
結局のところ、CASE
IIF
IIF
の方がはるかに簡単に使用できます。