2009-05-15 6 views
1

J'ai une requête mise en place qui contient une instruction CASE qui fonctionne 95% du temps ... Cet autre 5% est dû aux données ne sont pas là. Il y a d'autres données qui indiquent des pointeurs qui aideront ... Je sais juste si c'est possible ...SQL Cas avec conditions

Donc: CASE PRDE.STATUSCODE QUAND 'A' PUIS 'APPELÉ' QUAND 'D' PUIS 'Congédié' QUAND 'P' ALORS 'En attente' QUAND 'S' ALORS 'Satisfait' QUAND 'T' ALORS 'Réglé' END COMME STATUT

Parfois, le champ est '' mais un champ de texte appelé SATISFIEDDATE peut être rempli ... Puis-je écrire quelque chose comme: CASE '' aLORS [si SATISFIEDDATE <> '' puis 'satisfait']

Désolé si cela est bêtement facile ... :)

+0

Que se passe-t-il lorsque SATISFIEDDATE n'est pas null, mais le STATUSCODE n'est pas S? Qu'est-ce que ça veut dire? – ErikE

Répondre

1

Vous pouvez avoir une autre instruction CASE:

CASE '' THEN CASE WHEN SatisfiedDate != '' THEN 'Satisfied' END 

Une alternative serait comme ceci:

CASE 
    WHEN PRDE.STATUSCODE = 'A' THEN 'Appealed' 
    WHEN PRDE.STATUSCODE = 'D' THEN 'Dismissed' 
    WHEN PRDE.STATUSCODE = 'P' THEN 'Pending' 
    WHEN PRDE.STATUSCODE = 'S' 
     OR (PRDE.STATUSCODE = '' AND SatisfiedDate != '') THEN 'Satisfied' 
    WHEN PRDE.STATUSCODE = 'T' THEN 'Settled' 
END AS STATUS 
2
CASE 
    WHEN PRDE.STATUSCODE='A' THEN 'Appealed' 
    WHEN PRDE.STATUSCODE='D' THEN 'Dismissed' 
    WHEN PRDE.STATUSCODE='P' THEN 'Pending' 
    WHEN PRDE.STATUSCODE='S' OR (PRDE.STATUSCODE='' AND LEN(SatisfiedDate)>0) THEN 'Satisfied' 
    WHEN PRDE.STATUSCODE='T' THEN 'Settled' 
    ELSE '?null/unknown?' 
END AS STATUS 
0

vous pouvez faire des déclarations de cas NextEd, que ce soit dans votre clause d'autre ou dans une clause WHEN

CASE PRDE.STATUSCODE 
    WHEN 'A' THEN 'Appealed' 
    WHEN 'D' THEN 'Dismissed' 
    WHEN 'P' THEN 'Pending' 
    WHEN 'S' THEN 'Satisfied' 
    WHEN 'T' THEN 'Settled' 
    else 
     case 
      when SATISFIEDDATE is not null then 'Satisfied' 
     end 
END AS STATUS 
+0

J'espère que votre champ de date est un champ date-heure de lecture – DForck42

+0

"mais un champ de texte appelé SATISFIEDDATE peut-être ..." –

0

c'est peut-être ce que vous cherchez:

CASE PRDE.STATUSCODE 
WHEN 'A' THEN 'Appealed' 
WHEN 'D' THEN 'Dismissed' 
WHEN 'P' THEN 'Pending' 
WHEN 'S' THEN 'Satisfied' 
WHEN 'T' THEN 'Settled' 
WHEN '' AND NULLIF(PRDE.SATISFIEDDATE, '') IS NOT NULL THEN 'Satisfied' END AS STATUS 
Questions connexes