Tests conditionnels dans des requêtes SQL

Un test conditionnel permet de n’exécuter une instruction ou un ensemble d’instructions que si une ou plusieurs conditions sont remplies.

ACCESS Résultat requête

Dans le cadre de requêtes SQL, les tests conditionnels contribuent à créer des champs de données.

Condition simple : SI condition réalisée ALORS action1 SINON action2…

Les tests conditionnels sont une structure de programmation courante, facile à programmer qui se traduit ainsi en SQL :

iif(condition;action1;action2)

Qui traduit en Français signifie : si (iif) condition réalisée alors (;) réalise action 1 sinon (;) réalise action 2.

Exemple :

IIf(Left([FEC].[CompteNum],2)=45,"X","")

Dans cet exemple, si (iif) les deux chiffres les plus à gauche du champ numéro de compte de la table FEC (Left([FEC].[CompteNum],2)) égalent 45 (compte courant d’associés) alors insérer X sinon ne rien faire.

La fonction LEFT(chaîne,nbcar) permet de retourner le nombre souhaité (nbcar) de caractères parmi les premiers caractères d’une chaîne ou d’un champ de données. La fonction RIGHT réalise la même action mais sur la droite de la chaîne.

Le test conditionnel repose sur une comparaison. C’est la réalisation ou non de la condition qui conditionne l’action à exécuter.

Expression de la comparaison :

La condition utilise un ou des champs de données (dans l’exemple précédent la variable CompteNum), des opérateurs de comparaison (ici : =) et des nombres et du texte.

Les opérateurs de comparaison utilisés pour exprimer la condition sont pour une bonne part repris du monde des mathématiques :

  • < (inférieur à),
  • > (supérieur à),
  • <> (différent de),
  • = (égal à),
  • <= (inférieur ou égal à),
  • >= (supérieur ou égal à),
  • NOT (non)

Il est également possible de réaliser des calculs plus ou moins complexes mêlant fonctions, opérateurs arithmétiques (+, -, *, /), opérateurs de comparaison (<, >, =) et opérateurs booléens (AND, OR)

Par exemple, pour calculer une remise de fin d’année de 1 % pour chaque client réalisant un chiffre d’affaires dépassant 500 K€ :

iif(CA>500000,0.01,0)*CA AS RFA

Autres exemples :

  • pour éviter une division par zéro, la formule iif([champ1]=0,0,[champ2]/[champ1]) renvoie le résultat 0 (zéro) quand le champ [champ1] est nul, dans le cas contraire la division de [champ2] par [champ1] est effectuée.
  • la fonction IIF est également utilisée lorsqu’un champ numérique est vide. En effet, si ce champ est intégré dans une formule de calcul, le calcul ne sera pas exécuté puisque le contenu du champ n’est pas numérique. La formule iif([champ] is null,0,[champ]) remplace les champs vides par zéro.

Expression de conditions multicritères :

Le précédent exemple ne comprenait qu’un seul critère. La condition peut comprendre plusieurs critères. Chaque critère est lié au précédent par un opérateur AND (et), OR (ou).

Exemple :

iif((age>=18) AND (age<=30);action1;action2) : Si l’âge est compris entre 18 et 30 ans (bornes comprises) alors…

iif((age=30) OR (age=45);action1;action2) : Si l’âge est égal à 18 ans ou à 45 alors…

Attention aux conditions impossibles : par exemple, pour reprendre l’exemple précédent, la condition : (age=30) AND (age=45)… est irréalisable puisqu’un champ de données (ou un être humain normalement constitué d’ailleurs) ne peut simultanément prendre les valeurs 30 et 45.

Il est parfaitement possible d’imbriquer des conditions et de définir les priorités entre elles à l’aide de parenthèses. Dans ce cas, le régime des priorités répond aux mêmes règles qu’en mathématiques. A noter, chaque parenthèse ouverte doit être refermée…

Tests conditionnels imbriqués :

La réalité des choses (et quelquefois la perversité du programmeur, poète à sa manière) conduit le programmeur à imbriquer des tests.

Ces tests seront effectués jusqu’à ce qu’une condition ne soit pas remplie ; dans ce cas le programme sort de la séquence de tests et continue son exécution.

La structure de programmation est la suivante :

iif(condition;action1;iif(condition;action1;…)) : SI ALORS SINON SI ALORS SINON…

Le programmeur peut laisser libre cours à son imagination… Par exemple :

IIf(Left([FEC].[CompteNum],4)=4086,"X",IIf(Left([FEC].[CompteNum],4)=4099,"X",IIf(Left([FEC].[CompteNum],4)=4189,"X",IIf(Left([FEC].[CompteNum],4)=4199,"X",IIf(Left([FEC].[CompteNum],3)=267,"X",IIf(Left([FEC].[CompteNum],2)=17,"X",IIf(Left([FEC].[CompteNum],2)=45,"X",""))))))) AS Tiers_IG

ACCESS Requête SQL

Dans le mode visuel du SGBDR ACCESS, les tests conditionnels sont réalisés avec la fonction VraiFaux. La syntaxe est semblable à iif ; l’exemple SQL précédent se rédige ainsi :

Tiers_IG: VraiFaux(Gauche([FEC].[CompteNum];4)=4086;"X";VraiFaux(Gauche([FEC].[CompteNum];4)=4099;"X";VraiFaux(Gauche([FEC].[CompteNum];4)=4189;"X";VraiFaux(Gauche([FEC].[CompteNum];4)=4199;"X";VraiFaux(Gauche([FEC].[CompteNum];3)=267;"X";VraiFaux(Gauche([FEC].[CompteNum];2)=17;"X";VraiFaux(Gauche([FEC].[CompteNum];2)=45;"X";"")))))))

La rédaction est francisée : Gauche correspond à Left, VraiFaux à iif

Requête en mode visuel

___

Approfondir le sujet : Interroger une base de données avec une requête SQL / Maîtriser le langage de requête SQL / Analyse de données

Share Button
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.