带有T-SQL的CASE表达式

时间:2011-10-20 16:51:58

标签: sql-server tsql case

我正在使用:

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中出现了一些问题。

3 个答案:

答案 0 :(得分:5)

使用CASE有两种格式,您可以将它们混合在一起。

  

CASE表达式有两种格式:

     

简单的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

答案 1 :(得分:3)

近!你混合了两种不同的语法形式:

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

答案 2 :(得分: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。[ContainerId]的值与SR.[ContainerId] IS NULL的值进行比较。该比较的结果将始终为false,因此始终选择else条件。