Case complexe

Le
OokieDookie
Bonjour le groupe,

Je me casse la tte sur un test que je pensais pouvoir
rsoudre par des case en cascade, mais visiblement quelque
chose ne va pas.

Soient 2 colonnes Mode et Type (int)

En fonction du Mode, les valeurs de Type ont diffrentes
significations:

Mode Type Libell
4 0 'LIB1'
4 1 'LIB2'
2 0 'LIBA'
2 1 'LIBB'


Or si je tape

case Type
when Mode = 4 then
(case Type
when 0 then 'LCR soumettre acceptation'
when 1 then 'Billet Ordre recevoir'
when 2 then 'LCR non accepte'
when 3 then 'LCR accepte'
else 'Billet ordre reu'
end)
else 'AAA' end

J'ai une erreur de syntaxe au niveau du '='.
Si je tape une valeur la place de 'Mode = 4' je passe au
niveau de la syntaxe mais les rsultats sont tous 'AAA'.

Quelqu'un peut-il m'orienter ?

Merci.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #11719471
De mémoire, la syntaxe est soit :

CASE Champ WHEN Valeur1 THEN Résulttat1 etc...
CASE WHEN Condition1 THEN Résultat1 etc...

Le CASE Type WHEN Mode=4 combine les deux formes d'où je pense l'erreur.
Quand tu mets une valeur à la place de Mode=4, il me semble que tu testes le
type au lieu du mode. Essaie donc plutôt :
CASE Mode
WHEN 4 THEN
CASE Type
when 0 then 'LCR à soumettre à acceptation'
when 1 then 'Billet à Ordre à recevoir'
when 2 then 'LCR non acceptée'
when 3 then 'LCR acceptée'
else 'Billet à ordre reçu'
end
else 'AAA'
end

Enfin, dans ce cas précis, il me semble s'agir d'une simulation de jointure
avec une table de libellés. J'aurais donc plutôt tendance à créer cette
table si c'est bien le cas et faire une jointure....


"OokieDookie" de news:4c2a01c42c35$b56bb480$
Bonjour le groupe,

Je me casse la tête sur un test que je pensais pouvoir
résoudre par des case en cascade, mais visiblement quelque
chose ne va pas.

Soient 2 colonnes Mode et Type (int)

En fonction du Mode, les valeurs de Type ont différentes
significations:

Mode Type Libellé
4 0 'LIB1'
4 1 'LIB2'
2 0 'LIBA'
2 1 'LIBB'


Or si je tape

case Type
when Mode = 4 then
(case Type
when 0 then 'LCR à soumettre à acceptation'
when 1 then 'Billet à Ordre à recevoir'
when 2 then 'LCR non acceptée'
when 3 then 'LCR acceptée'
else 'Billet à ordre reçu'
end)
else 'AAA' end

J'ai une erreur de syntaxe au niveau du '='.
Si je tape une valeur à la place de 'Mode = 4' je passe au
niveau de la syntaxe mais les résultats sont tous à 'AAA'.

Quelqu'un peut-il m'orienter ?

Merci.
Le #11719461
Merci pour ta réponse ;)

Je vais regarder cette histoire de jointure.
Merci encore.

-----Message d'origine-----
De mémoire, la syntaxe est soit :

CASE Champ WHEN Valeur1 THEN Résulttat1 etc...
CASE WHEN Condition1 THEN Résultat1 etc...

Le CASE Type WHEN Mode=4 combine les deux formes d'où je


pense l'erreur.
Quand tu mets une valeur à la place de Mode=4, il me


semble que tu testes le
type au lieu du mode. Essaie donc plutôt :
CASE Mode
WHEN 4 THEN
CASE Type
when 0 then 'LCR à soumettre à acceptation'
when 1 then 'Billet à Ordre à recevoir'
when 2 then 'LCR non acceptée'
when 3 then 'LCR acceptée'
else 'Billet à ordre reçu'
end
else 'AAA'
end

Enfin, dans ce cas précis, il me semble s'agir d'une


simulation de jointure
avec une table de libellés. J'aurais donc plutôt tendance


à créer cette
table si c'est bien le cas et faire une jointure....


"OokieDookie"

écrit dans le message
de news:4c2a01c42c35$b56bb480$
Bonjour le groupe,

Je me casse la tête sur un test que je pensais pouvoir
résoudre par des case en cascade, mais visiblement quelque
chose ne va pas.

Soient 2 colonnes Mode et Type (int)

En fonction du Mode, les valeurs de Type ont différentes
significations:

Mode Type Libellé
4 0 'LIB1'
4 1 'LIB2'
2 0 'LIBA'
2 1 'LIBB'


Or si je tape

case Type
when Mode = 4 then
(case Type
when 0 then 'LCR à soumettre à acceptation'
when 1 then 'Billet à Ordre à recevoir'
when 2 then 'LCR non acceptée'
when 3 then 'LCR acceptée'
else 'Billet à ordre reçu'
end)
else 'AAA' end

J'ai une erreur de syntaxe au niveau du '='.
Si je tape une valeur à la place de 'Mode = 4' je passe au
niveau de la syntaxe mais les résultats sont tous à 'AAA'.

Quelqu'un peut-il m'orienter ?

Merci.


.



Fred BROUARD
Le #11719421
plus simple :
CASE
WHEN Mode = 4 AND Type = 0 THEN 'LIB1'
WHEN Mode = 4 AND Type = 1 THEN 'LIB2'
WHEN Mode = 2 AND Type = 0 THEN 'LIBA'
WHEN Mode = 2 AND Type = 1 THEN 'LIBB'
END as Libelle

PS : évite les accents et autres caractères diacritiques dans les noms
d'objet comme "libellé"

A lire sur le CASE :
http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_case

A +


--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************


OokieDookie a écrit:
Bonjour le groupe,

Je me casse la tête sur un test que je pensais pouvoir
résoudre par des case en cascade, mais visiblement quelque
chose ne va pas.

Soient 2 colonnes Mode et Type (int)

En fonction du Mode, les valeurs de Type ont différentes
significations:

Mode Type Libellé
4 0 'LIB1'
4 1 'LIB2'
2 0 'LIBA'
2 1 'LIBB'


Or si je tape

case Type
when Mode = 4 then
(case Type
when 0 then 'LCR à soumettre à acceptation'
when 1 then 'Billet à Ordre à recevoir'
when 2 then 'LCR non acceptée'
when 3 then 'LCR acceptée'
else 'Billet à ordre reçu'
end)
else 'AAA' end

J'ai une erreur de syntaxe au niveau du '='.
Si je tape une valeur à la place de 'Mode = 4' je passe au
niveau de la syntaxe mais les résultats sont tous à 'AAA'.

Quelqu'un peut-il m'orienter ?

Merci.



Publicité
Poster une réponse
Anonyme