次のようなクエリがあります。
SELECT *,
(A+B) AS TOTALVALUE
FROM
(SELECT A,B FROM MYTABLE) AS MYTABLE1
case...when
計算された値でa を使用するにはどうすればよいですか? たとえば、計算された値が 1 より大きい場合は 10 になり、それ以外の場合はその値を返すようにします。どうすればそれを達成できますか?
次のようなクエリがあります。
SELECT *,
(A+B) AS TOTALVALUE
FROM
(SELECT A,B FROM MYTABLE) AS MYTABLE1
case...when
計算された値でa を使用するにはどうすればよいですか? たとえば、計算された値が 1 より大きい場合は 10 になり、それ以外の場合はその値を返すようにします。どうすればそれを達成できますか?
SELECT *
, (A+B) AS TOTAL VALUE
, case when (A + B) > 1 then 10 else (A + B) end as my_calc_col
FROM MYTABLE
あなたも考慮したいかもしれませんNULLs
:
select
x.A
, x.B
, case when TOTAL_VALUE > 1 then 10 else TOTAL_VALUE end as TOTAL_VALUE2
from
(
select coalesce(A, 0) + coalesce(B, 0) as TOTAL_VALUE
, A
, B
FROM MYTABLE
) x
編集:私もこのビットを単純化しました:
FROM
(SELECT A,B FROM MY TABLE) AS MYTABLE1
簡単に:
SELECT A, B, .....
FROM MYTABLE
他の回答に加えて、SQLServerには2つのタイプのCASEがあることを指摘する価値があるかもしれません
これらは同等です
CASE x
WHEN y THEN z
ELSE NULL
END
と
CASE
WHEN x = y THEN z
ELSE NULL
END
しかし、私が知る限り、最初の表現で表現することはできません。
たとえば、2番目のcaseステートメントは次のことを実行できます。
CASE
WHEN x + 1 = y - 1 THEN z
ELSE NULL
END
2番目のcaseステートメントで式を使用すると便利ですが、単純な値の比較が必要な場合は、最初のステートメントを使用してください。
SELECT
*,
CASE WHEN
(A+B) > 1
THEN
10
ELSE
(A+B) END
AS TOTAL VALUE
FROM
(SELECT A,B FROM MY TABLE) AS MYTABLE1