sql >> データベース >  >> RDS >> Sqlserver

SQLServerでIF...THENロジックを使用する方法

    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 通常、使用する方がはるかに簡単です。


    1. with句を使用してステートメントを更新する

    2. PostgresのWHEREで正規表現を使用する

    3. MariaDB CEIL()の説明

    4. SQL Server(T-SQL)でクエリ結果を添付ファイルとして電子メールで送信する方法