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
そのようです
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つだけになります。
クエリは、次のように少し簡単に書くことができます。
DECLARE @T INT = 2
SELECT CASE
WHEN @T < 1 THEN 'less than one'
WHEN @T = 1 THEN 'one'
ELSE 'greater than one'
END T
条件付きクエリを繰り返さずに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つ以上のケースをキャストする必要があります。
このように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]