SÉLECTIONNEZ CAS vs CAS DANS SQL

Je ne comprends pas très bien pourquoi ces deux codesamples renvoyer une valeur différente.

d'une certaine manière incorrecte, mais de travailler la syntaxe, renvoie des résultats faux, e.g il retourne 0 lorsque la comparaison est faite sur deux valeurs:

(SELECT CASE 
    WHEN 
       SUM(V.IsCompatible) OVER 
          (PARTITION BY ComputerName, UserID) = ApplicationCount 
    THEN 1 ELSE 0 END
) AS CompatibleUser

Celui-ci renvoie le valeurs correctes, c'est à dire. 1 quand il y a des deux valeurs égales par rapport.

(CASE 
    WHEN 
       SUM(V.IsCompatible) OVER 
         (PARTITION BY ComputerName, UserID) = ApplicationCount 
    THEN 1 ELSE 0 END
) AS CompatibleUser

ou encore plus simple:

(SELECT CASE 
    WHEN 
       X = Y 
    THEN 1 ELSE 0 END
) AS Result

X = 22 ET Y = 22 => Result = 0

(CASE 
    WHEN 
       X = Y 
    THEN 1 ELSE 0 END
) AS Result

X = 22 ET Y = 22 => Result = 1

Je comprends l'application de la syntaxe correcte est important, et je suis conscient de l'SÉLECTIONNEZ CAS la syntaxe en T-SQL, mais je ne comprends pas comment le premier exemple de code est évalué et la réalisation d'un résultat inattendu.

mise à jour: requête complète dans son contexte

select userapplication.username,
   computerdetails.computername,
   sum(userapplication.iscompatible) 
       over (partition by computerdetails.computername, 
                          userapplication.userid) as compatiblecount,
   userapplication.applicationcount,
   ( case
       when sum(userapplication.iscompatible) 
           over (partition by 
           computerdetails.computername, 
           userapplication.userid) <> userapplication.applicationcount 
       then 0
       else 1
     end 
   ) as usercomputeriscompatible
from   computerdetails
   right outer join usercomputer
     on computerdetails.computerid = usercomputer.computerid
   right outer join userapplication
     on usercomputer.gebruikerid = userapplication.userid 

donc userComputerIsCompatible est le résultat en question ici

Vous pourriez avoir à montrer un peu plus de votre requête. Ces samples utilisés dans le SELECT clause, le WHERE clause, HAVING clause, quelque part d'autre?
J'ai ajouté la requête ( un peu modifié dans l'appellation), mais il représente la façon dont il fonctionne

OriginalL'auteur Caspar Kleijne | 2011-11-04