web-dev-qa-db-ja.com

SQL Server-ケースステートメント

Caseステートメントのコンテキスト内でこれを実行できないことはほぼ確実であり、それに関するドキュメントを見つけることはできませんでしたが、以下を実行することは可能です。

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

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

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

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

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

そのようです

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つだけになります。

20

クエリは、次のように少し簡単に書くことができます。

DECLARE @T INT = 2 

SELECT CASE 
         WHEN @T < 1 THEN 'less than one' 
         WHEN @T = 1 THEN 'one' 
         ELSE 'greater than one' 
       END T
19
Gidil

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

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つ以上のケースをキャストする必要があります。

2
Tim Lehner

このように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]
0
Debendra Dash