使用案例表达式检查计算值

时间:2012-10-09 10:15:58

标签: sql

我有一个查询,例如:

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

如何将case...when与计算值一起使用?例如,如果我的计算值大于1,我希望它为10,否则我希望它返回其值。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

除了其他答案之外,可能值得指出SQL Server中有两种类型的CASE

这些是等效的

CASE x
   WHEN y THEN z
   ELSE NULL
END

CASE 
   WHEN x = y THEN z
   ELSE NULL
END

但据我所知,你不能用第一个表达:

e.g。第二个案例陈述可以做到:

CASE 
   WHEN x + 1 = y - 1 THEN z
   ELSE NULL
END

在第二个case语句中使用表达式很有用,但如果需要简单的值比较,请使用第一个。