20

ケースステートメントのコンテキスト内でこれを行うことはできないとほぼ確信しており、それに関するドキュメントを見つけることができませんでしたが、次のことは可能ですか:

SELECT CASE WHEN testValue > 2 
THEN testValue(Without Repeating it) ELSE FailValue)
END 
FROM Table 

より完全な例:

Select CASE WHEN (Foo-stuff+bar) > 2 
THEN Conditional statement without >2 Else "Fail"
END 
FROM TABLE

条件付きクエリを繰り返さずに選択を作成する方法を探しています。

編集:私の側の悪い例と、私が探していた答えの欠如のため:

testValue = (Table.A / Table.B) * Table.C Table.D

SELECT CASE WHEN testValue > 2 
THEN testValue ELSE FailValue)
END 
FROM Table 
4

4 に答える 4

20

そのようです

DECLARE @t INT=1

SELECT CASE
            WHEN @t>0 THEN
                CASE
                    WHEN @t=1 THEN 'one'
                    ELSE 'not one'
                END
            ELSE 'less than one'
        END

編集:質問を詳しく調べた後、値を計算する関数を作成するのが最善の選択肢だと思います。そうすれば、計算が必要な場所が複数ある場合でも、ロジックを維持するポイントは 1 つだけです。

于 2013-10-07T19:40:22.140 に答える
2

条件付きクエリを繰り返さずに選択を作成する方法を探しています。

繰り返したくないと思いますFoo-stuff+bar。計算を派生テーブルに入れることができます。

SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END 
FROM (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable) AS a

一般的なテーブル式も同様に機能します。

WITH a AS (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable)
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END    
FROM a

また、スイッチの各部分は同じデータ型を返す必要があるため、1 つ以上のケースをキャストする必要がある場合があります。

于 2013-10-07T19:52:05.523 に答える
0

このように case ステートメントを使用できます

select Name,EmailId,gender=case 
when gender='M' then 'F'
when gender='F' then 'M'
end
 from [dbo].[Employees]

次のようにすることもできます。

select Name,EmailId,case gender
when 'M' then 'F'
when 'F' then 'M'
end
 from [dbo].[Employees]
于 2016-07-28T11:33:56.800 に答える