Probleme fonction SWITCH SQL ACCESS

Probleme fonction SWITCH SQL ACCESS - SQL/NoSQL - Programmation

Marsh Posté le 28-03-2011 à 11:34:55    

Bonjour,
 
J'ai un petit problème que je n'arrive pas à identifier, du moins à comprendre ce qui fait "foirer" ma requête.  
 
Je suis sous ACCESS 2003, dans une mes requêtes j'utilise la fonction SWITCH pour coder différement certaines occurences.  
 
Dès lors que je veux rajouter une nouvelle occurence dans la clause SWITCH ça ne passe pas, j'ai comme message : expression trop complexe.  
 
Voilà je ne comprends pourquoi ça marche pour 12 valeurs et pour 13 non.
 
Je mets la requête qui marche, est ce que quelqu'un saurait comment rajouter de nouvelles possibilités dans le SWITCH ?
 
Merci.
 
Requête qui marche :
 

Code :
  1. SELECT [A02 004].PM,
  2. [A02 004].AN,
  3. Switch([COD] Like "OP*","ENRO",
  4. [AN_ANACOD] Like "*_PO*","ENRO",
  5. [AN_ANACOD] Like "RVES","ENRO",
  6. [AN_ANACOD] Like "*-BE*","ENRO",
  7. [AN_ANACOD] Like "BE","ENRO",
  8. [AN_ANACOD] Like "*_BE*","ENRO",
  9. [AN_ANALIB] Like "*OPER*","ENRO",
  10. [AN_ANALIB] Like "*opér*","ENRO",
  11. [AN_ANALIB] Like "*RESECTION*","ENRO",
  12. [AN_ANACOD] Like "CR*","ENRO",
  13. [AN_ANACOD] Like "*OP*","ENRO",
  14. [AN_ANACOD] Like "CUR","ENRO",
  15. [AN_ANACOD] Like "HYPOP","ENRO",True,Null) AS ACOD1I
  16. FROM [A02 004];


 
Requête qui plante quand je rajoute une nouvelle occurence.
 

Code :
  1. SELECT [A02 004].PM,
  2. [A02 004].AN,
  3. Switch([COD] Like "OP*","ENRO",
  4. [AN_ANACOD] Like "*_PO*","ENRO",
  5. [AN_ANACOD] Like "RVES","ENRO",
  6. [AN_ANACOD] Like "*-BE*","ENRO",
  7. [AN_ANACOD] Like "BE","ENRO",
  8. [AN_ANACOD] Like "*_BE*","ENRO",
  9. [AN_ANALIB] Like "*OPER*","ENRO",
  10. [AN_ANALIB] Like "*opér*","ENRO",
  11. [AN_ANALIB] Like "*RESECTION*","ENRO",
  12. [AN_ANACOD] Like "CR*","ENRO",
  13. [AN_ANACOD] Like "*OP*","ENRO",
  14. [AN_ANACOD] Like "CUR","ENRO",
  15. [AN_ANACOD] Like "CURO","ENRO",
  16. [AN_ANACOD] Like "HYPOP","ENRO",True,Null) AS ACOD1I
  17. FROM [A02 004];


Reply

Marsh Posté le 28-03-2011 à 11:34:55   

Reply

Marsh Posté le 28-03-2011 à 13:15:33    

La commande SWITCH est probablement limitée a 12 valeurs.
Le plus facil pour eviter le probleme est d'utiliser une deuxieme table avec les valeurs et faire un lookup dessus (un join); Avec cette facon de faire, plus aucune limite et c'est beaucoup plus facile a lire et a mettre a jour :)

Reply

Marsh Posté le 28-03-2011 à 13:58:19    

Salut Oliiii,
 
Merci pour ta réponse. Si je comprends bien je fais une table du genre :
 
"OP*","ENRO",
"*_PO*","ENRO",
"RVES","ENRO",
"*-BE*","ENRO",
"BE","ENRO",
"*_BE*","ENRO",
"*OPER*","ENRO",
"*opér*","ENRO",
"*RESECTION*","ENRO",
"CR*","ENRO",
"*OP*","ENRO",
"CUR","ENRO",
"HYPOP","ENRO"
 
et ensuite un select en faisant un inner join sur les codes OP, _PO, etc... ? Sachant que ma requête contient une autre requête select [A02 004], ça peut marcher ça ?

Reply

Marsh Posté le 28-03-2011 à 14:19:25    

oui en gros c'est ca l'idée

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed