我正在使用:
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
中出现了一些问题。
答案 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条件。