Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Case complexe

3 réponses
Avatar
OokieDookie
Bonjour le groupe,

Je me casse la t=EAte sur un test que je pensais pouvoir=20
r=E9soudre par des case en cascade, mais visiblement quelque=20
chose ne va pas.

Soient 2 colonnes Mode et Type (int)

En fonction du Mode, les valeurs de Type ont diff=E9rentes=20
significations:

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


Or si je tape

case Type
when Mode =3D 4 then=20
(case Type
when 0 then 'LCR =E0 soumettre =E0 acceptation'
when 1 then 'Billet =E0 Ordre =E0 recevoir'
when 2 then 'LCR non accept=E9e'
when 3 then 'LCR accept=E9e'
else 'Billet =E0 ordre re=E7u'
end)
else 'AAA' end

J'ai une erreur de syntaxe au niveau du '=3D'.
Si je tape une valeur =E0 la place de 'Mode =3D 4' je passe au=20
niveau de la syntaxe mais les r=E9sultats sont tous =E0 'AAA'.

Quelqu'un peut-il m'orienter ?

Merci.

3 réponses

Avatar
Patrice
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" a é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.
Avatar
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" a


é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.


.



Avatar
Fred BROUARD
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.