2012-10-09 20 views
1

的計算值我有一個查詢,如:檢查與案件表達

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

如何使用與計算值case...when?例如,如果我的計算值大於1,我希望它是10,否則我希望它返回它的值。我怎麼能做到這一點?

+0

你有什麼試過?從[MSDN](http://msdn.microsoft.com/zh-cn/library/ms181765.aspx)中的示例開始。 –

回答

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 
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 
0

除了其他的答案可能是值得指出的是,也有在SQL Server兩種類型的CASE

這些相當於

CASE x 
    WHEN y THEN z 
    ELSE NULL 
END 

CASE 
    WHEN x = y THEN z 
    ELSE NULL 
END 

但你可以據我所知,不會用第一個詞表達:

eg第二個case語句可以這樣做:

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

在第二種情況下語句中使用的表達式是有用的,但是如果你需要一個簡單的值進行比較,使用第一個。