Sql server 用T-SQL实现CASE表达式

Sql server 用T-SQL实现CASE表达式,sql-server,tsql,case,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。我不知道为什么,当SR.[ContainerId]为NULL时,中可能有一些错误有两种使用CASE的格式,您将它们混合在一起

我正在使用:

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

它没有给我想要的结果
IsSampleReceived
始终为
1
。我不知道为什么,当SR.[ContainerId]为NULL时,
中可能有一些错误

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

大小写表达式有两种格式:

简单大小写表达式将表达式与一组简单大小写进行比较 表达式来确定结果

搜索的大小写表达式对一组布尔表达式求值 确定结果

相反,请尝试:

select case 
        when SR.[ContainerId] is 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

案例陈述有两种:“简单”和“搜索”。在代码中,您将这两种语句组合在一起,这会产生错误的结果

简单:

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]为NULL的值进行比较。该比较的结果将始终为false,因此始终选择else条件