1

次のようなクエリがあります。

SELECT *,
(A+B) AS TOTALVALUE
FROM 
(SELECT A,B FROM MYTABLE) AS MYTABLE1

case...when計算された値でa を使用するにはどうすればよいですか? たとえば、計算された値が 1 より大きい場合は 10 になり、それ以外の場合はその値を返すようにします。どうすればそれを達成できますか?

4

3 に答える 3

2
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
于 2012-10-09T10:17:16.850 に答える
0

他の回答に加えて、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ステートメントで式を使用すると便利ですが、単純な値の比較が必要な場合は、最初のステートメントを使用してください。

于 2012-10-09T10:37:16.047 に答える
0
SELECT 
   *,
   CASE WHEN 
      (A+B) > 1 
   THEN 
     10 
   ELSE 
     (A+B) END
 AS TOTAL VALUE
FROM 
(SELECT A,B FROM MY TABLE) AS MYTABLE1
于 2012-10-09T10:18:19.133 に答える