J'utilise:
SELECT CASE SR.[ContainerId] WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived] FROM SomeTable SR where SomeCondition
Cela ne me donne pas le résultat désiré. IsSampleReceived
est toujours 1
. Je ne sais pas pourquoi, peut-être qu'il y a quelque chose qui ne va pas dans WHEN SR.[ContainerId] IS NULL
.
Il y a deux formats d'utilisation de CASE
et vous les mélangez set.
L'expression CASE a deux formats:
L'expression CASE simple compare une expression à un set d'expressions simples pour déterminer le résultat.
L'expression CASE recherchée évalue un set d'expressions booleannes pour déterminer le résultat.
Voir http://msdn.microsoft.com/en-us/library/ms181765.aspx
Au lieu de cela, essayez:
select case when SR.[ContainerId] is null then 0 else 1 end as [IsSampleReceived] from SomeTable SR where SomeCondition
Presque! Vous étiez en train de mélanger les deux différentes forms de syntaxe:
SELECT CASE WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived] FROM SomeTable SR where SomeCondition
Il existe deux types d'instructions CASE: "simple" et "recherché". Dans votre code, vous combinez ces deux types d'instructions, ce qui vous donne des résultats incorrects.
Simple:
SELECT CASE SR.[ContainerId] WHEN NULL THEN 0 ELSE 1 END AS [IsSampleReceived] FROM SomeTable SR where SomeCondition
Cherché:
SELECT CASE WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived] FROM SomeTable SR where SomeCondition
Dans votre requête d'origine, il fait une version simple en comparant la valeur de SR. [ContainerId] à la valeur de SR.[ContainerId] IS NULL
. Le résultat de cette comparaison sera toujours faux, donc la condition else a toujours été sélectionnée.