1

次のネストされたIIFをSQLのCASEステートメントにデコードしてください。SQLServer2012でIIFが許可されていることは知っていますが、ネストされたIIFロジックを簡単に把握するのは難しいと思います。以下は私のネストされたIIFステートメントです。

IIF(IIF(TABLE_A.Col_1 = 0, TABLE_A.Col_2 + (2*TABLE_A.Col_3), TABLE_A.Col_1)<=.5, 'A', 'B') AS Result

どんな助けでも大歓迎です。

4

4 に答える 4

3

これは同等である必要があります。

CASE
    WHEN
        CASE
            WHEN TABLE_A.Col_1 = 0
            THEN TABLE_A.Col_2 + (2*TABLE_A.Col_3)
            ELSE TABLE_A.Col_1
        END <= .5
    THEN 'A'
    ELSE 'B'
END As Result
于 2012-07-03T14:59:44.043 に答える
1
CASE 
    WHEN 
     (CASE 
          WHEN TABLE_A.Col1= 0 
          THEN TABLE_A.Col2_2 + (2*TABLE_A.Col3)
          ELSE TABLE_A.Col1 
      END) <=0.5 
    THEN 'A'
    ELSE 'B'
END
AS result
于 2012-07-03T14:59:38.230 に答える
0

これが、1つのCASE式に要約されるものだと思います。

CASE
  WHEN TABLE_A.Col_1 = 0 AND TABLE_A.Col_2 + (2*TABLE_A.Col_3) <= .5 THEN 'A'
  WHEN TABLE_A.Col_1 <> 0 AND TABLE_A.Col_1 <= .5 THEN 'A'
  ELSE 'B'
END
于 2012-07-03T15:07:35.243 に答える
0

これは今では古く、すでに機能している他の答えがありますが、楽しみのために、次のように、CASEステートメントをまったく使用せずに関数式としてこれを書くことができます。

char(65 + ceiling(ceiling(COALESCE(NULLIF(TABLE_A.Col_1, 0), TABLE_A.Col_2 + (2*TABLE_A.Col_3))) - .5 / 10000000000000))

インデックスが適切な大規模なセットで、機能的アプローチのパフォーマンスが著しく向上する可能性はほとんどありません。

これが私の概念実証テストスクリプトです。

http://sqlfiddle.com/#!3/a95b3/2

于 2015-05-20T16:16:52.383 に答える