2009-11-03 4 views
0

Existe-t-il un moyen d'utiliser une instruction CASE et de renvoyer 2 valeurs différentes?TSQL - Comment retourner 2 valeurs avec une instruction case?

La requête suivante a 2 CASE instructions avec les mêmes conditions.

select case when DA.value = 1 
      then da.Good else da.Bad end as Foo, 
     case when DA.value = 1 
      then ot.Good else ot.Bad end as Bar, 
from someTable DA (nolock) 
     join otherTable OT (nolock) on OT... 
where ... 

Y at-il de toute façon, de préciser que CASE déclaration une fois?
de sorte qu'il n'est pas nécessaire de garder les deux CASE instructions en synchronisation chaque fois que la condition change?

Répondre

2

Il n'y a aucun moyen de faire ce que vous décrivez. Non seulement votre déclaration de cas est différente dans les deux cas, mais vous renvoyez des valeurs provenant de tables totalement différentes dans chaque cas.

+0

@Josheph. Merci pour la réponse. Cette question visait principalement à confirmer s'il existe réellement un moyen de le faire. Mais je n'ai pas réussi à trouver un moyen de contourner le problème, même après avoir lu MSDN BOL. – Sung

2

Je ne sais pas si c'est ce dont vous avez besoin, mais vous pouvez faire des combinaisons comme:

select 
    case 
     when da.value = 1 and ot.attributeValue = 1 then ot.good 
     when da.value = 2 and ot.attributeValue = 3 then ot.good 
     ... 
     else ot.bad 
    end Result 
from 
    someTable DA 

    JOIN otherTable OT 
     on (ot.id = da.id)