SQL Serverには、クエリ内の値に対してリアルタイムのプログラムロジックを実行できる独自の機能があります。これらの論理評価に基づいて、返されるデータセットの一部としてさまざまな値を生成できます。
CASEステートメントの使用
これは、 CASE
を使用してSQLServerのすべてのバージョンで最も簡単に実行できます。 論理的な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
を一時的に削除しましょう これは非常に単純な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」を返します。どちらのフィールドも検索に一致しない場合は、代わりに「Earth」の値を返します。
ロジックを疑似コードとして再配置するにはIF... THEN ... ELSE
ステートメント、SQLに評価を依頼しているだけです:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
最後に、 CASE
ステートメントは、常に最後に一致する END
を追加する必要があります 声明。上記の例では、 locale
に返される結果の値の名前も変更しています。 、それは確かにオプションですが。
IIF関数の使用
最新バージョンのSQLを使用している場合は、SQLServer2012で非常に便利なIIF
が導入されたことを知っておくと便利です。 働き。 IIF
IF ... ELSE
を実行するための簡略化された方法です。 /ケースコード> ステートメントを作成し、結果の評価に応じて2つの値のいずれかを返します。
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
通常、使用する方がはるかに簡単です。