我有一个查询,例如:
SELECT *,
(A+B) AS TOTALVALUE
FROM
(SELECT A,B FROM MYTABLE) AS MYTABLE1
如何将 acase...when
与计算值一起使用?例如,如果我的计算值大于 1,我希望它为 10,否则我希望它返回它的值。我怎样才能做到这一点?
我有一个查询,例如:
SELECT *,
(A+B) AS TOTALVALUE
FROM
(SELECT A,B FROM MYTABLE) AS MYTABLE1
如何将 acase...when
与计算值一起使用?例如,如果我的计算值大于 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
SELECT
*,
CASE WHEN
(A+B) > 1
THEN
10
ELSE
(A+B) END
AS TOTAL VALUE
FROM
(SELECT A,B FROM MY TABLE) AS MYTABLE1
除了其他答案之外,可能值得指出的是 SQL Server 中有两种类型的 CASE
这些是等价的
CASE x
WHEN y THEN z
ELSE NULL
END
和
CASE
WHEN x = y THEN z
ELSE NULL
END
但据我所知,你不能用第一个表达:
例如,第二个 case 语句可以:
CASE
WHEN x + 1 = y - 1 THEN z
ELSE NULL
END
在第二个 case 语句中使用表达式很有用,但如果需要简单的值比较,请使用第一个。