Articles

How to Use IF…THEN Logic in SQL Server

Posted on

SQL Server には、クエリ内の値に対してリアルタイムのプログラム ロジックを実行できるというユニークな機能があります。

CASE ステートメントの使用

これは、SQL Server のすべてのバージョンにおいて、CASEIF...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

このステートメントの特別な CASECASECASESELECT ステートメントであることに気づきましょう。

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

まず、CASEWHENCASEbooks.titlebooks.primary_authorTHENは値「Middle-earth」を返します。 どちらのフィールドも検索にマッチしない場合は、代わりに「地球」という値を返します。

ロジックを擬似コードの IF...THEN...ELSE ステートメントとして再構成すると、単に SQL に評価を求めていることになります。

IF title == 'The Hobbit' OR primary_author == 'Tolkien'THEN RETURN 'Middle-earth'ELSE RETURN 'Earth'END

最後に、CASEEND ステートメントを最後に付け加えなければならないことを覚えておくことが重要です。

IIF関数の使用

もしあなたがより新しいバージョンのSQLを使用しているのであれば、SQL Server 2012では非常に便利なIIFIIFIF...ELSECASEステートメントを実行し、その結果の評価に応じて2つの値のうちの1つを返すための省略法です。

上記の例でIIFを使用するように再構築するのは非常に簡単です。

SELECT IIF( books.title = 'The Hobbit' OR books.primary_author = 'Tolkien', 'Middle-earth', 'Earth') AS locale, books.*FROM books

IIFCASE ステートメントの構文の多くを、引数を区別するためのいくつかの単純なカンマ セパレータに置き換えることができます。

結局のところ、CASEIIFIIF の方がはるかに簡単に使用できます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です