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条件