2011-10-20 74 views
2

我使用:CASE表達式用T-SQL

SELECT 
    CASE SR.[ContainerId] WHEN SR.[ContainerId] IS NULL 
    THEN 0 
    ELSE 1 
    END AS [IsSampleReceived] 
FROM SomeTable SR where SomeCondition 

它沒有給我想要的結果。 IsSampleReceived總是1。我不知道爲什麼,也許在WHEN SR.[ContainerId] IS NULL有一些錯誤。

回答

5

有兩種格式的使用CASE,你將它們混合在一起。

的情況下表達有兩種格式:

簡單情況下表達的表達與一組簡單 表達式來確定結果。

搜索到的CASE表達式對一組布爾表達式進行求值,以確定結果爲 。

http://msdn.microsoft.com/en-us/library/ms181765.aspx

相反,嘗試:

select case 
     when SR.[ContainerId] is null 
      then 0 
     else 1 
     end as [IsSampleReceived] 
from SomeTable SR 
where SomeCondition 
+0

感謝它的工作。 –

3

近!您正在混合兩種不同的語法形式:

SELECT CASE WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived] 
FROM SomeTable SR where SomeCondition 
1

有兩種CASE語句:「簡單」和「搜索」。在你的代碼中,你正在把這兩種語句結合起來,這就給你提供了不正確的結果。

簡單:

SELECT CASE SR.[ContainerId] WHEN NULL THEN 0 ELSE 1 END AS [IsSampleReceived] 
FROM SomeTable SR where SomeCondition 

搜索:

SELECT CASE WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived] 
FROM SomeTable SR where SomeCondition 

在原始查詢,它是做一個簡單的版本比較SR的值數據筒]到SR.[ContainerId] IS NULL值。該比較的結果將始終爲假,因此始終選擇其他條件。