Bonjour à tous,
j'ai comme vous pouvez vous en douter un problème au niveau d'une requête SQL trop complexe pour mon tout petit niveau, et j'aurais grandement besoin de votre aide !
Voici le contexte : dans le cadre d'un dispositif de détection d'articles dans un rayonnage (en RFID), je dois créer un petit logiciel permettant de gérer les infos reçues...
Nous avons concrètement des articles (textile ici) répartis dans plusieurs rayons d'un magasin. Chaque article est attaché à une puce RFID, identifiée par un id unique.
Les différentes antennes RFID du dispositif vont scanner leur rayon respectif et récupérer les identifiants des puces RFID qu'ils auront captés.
Le dispositif communique ensuite cette liste de couples id_Rfid/id_Antenne à la base de données.
C'est ensuite à partir de cette base de données que le logiciel va afficher toutes les infos nécessaires et effectuer les traitements que l'utilisateur aurait besoin de faire.
Pour le moment j'ai la base de donnée que voici :
PS : j'utilise Visual Studio pour le logiciel et la base de donnée.
Nous avons donc les tables suivantes :
- article_detecte : contient l'ensemble des id_Rfid (uniques) des articles détectés par le dispositif, ainsi que identifiant de l'antenne qui les a détectés. En effet, il existe plusieurs
zones et donc plusieurs antennes RFID.
- tag : contient les associations entre les id_Rfid des tags et les id_Articles. Me sert à faire le lien entre un tag et l'article sur lequel il est attaché.
- article : c'est ma "base articles". Elle contient en fait toutes les désignations articles avec lesquels je travaille. id_Article identifie un article de façon unique et les autres champs
nous donnent diverses informations dont nous pouvons avoir besoin (dont l'emplacement théorique du produit, qui est très important).
- zone : définit les différentes zones de détection dans le magasin (ex : rayon 1, rayon 2, réserve, cabines d'essayage...)
- antene (avec une faute d'orthographe, oui désolé ) : contient les associations entre les id_Antenne et les id_Zone. Me sert à faire le lien entre une antenne et la zone dans laquelle elle
est installée.
Voilà, je pense que c'est à peu près complet...mais c'est maintenant que mon problème arrive !
Je souhaites créer une requête qui me donnerais l'ensemble des articles détectés avec leur emplacement réel et théorique ainsi que leur quantité (et avec diverses informations comme le
cug, le libelle, les seuils, etc...mais ça je saurais faire une fois le "gros" de la requête trouvé...).
Mais j'ai un gros souci : il me faut bien sur les quantités des articles là où on les a détectés réellement mais aussi les articles non détectés avec une quantité de 0 (zéro).
En effet, si un article (un tag) est référence mais non détecté, c'est qu'il est en rupture de stock. Il faut alors l'afficher à zéro !
Il y a donc une histoire de LEFT OUTER JOIN mixé avec des INNER JOIN, mais je n'y arrive pas du tout Je crois bien que c'est un peu trop compliqué pour mes compétences actuelles.
Voici le contenu des tables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 antene : id_Antenne id_Zone 1 1 2 2 3 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 zone : id_Zone nom_Zone 1 Rayon 1 2 Rayon 2 3 Rayon 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 article : id_Article id_Zone Libelle seuilbas seuilhaut cug 1111 1 Tee-Shirt Blanc XL 2 8 111111 1112 1 Polo Vert S 2 8 111112 1113 2 Jean Noir L 2 5 111113 1114 3 Chemise Rouge L 3 7 111114 1115 3 Chemise Rouge XL 2 5 111114
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 tag : id_Rfid id_Article 222221 1111 222222 1112 222223 1113 222224 1113 222225 1113 222226 1114
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 article_detecte : (je n'affiche pas date et puissance qui ne servent à rien ici) id_Rfid id_Antenne 222221 1 222222 2 222223 2 222224 3 222225 2
J'ai donc besoin de pouvoir afficher l'ensemble des articles détectés, avec le cug, le libelle, l'emplacement, la quantité, les seuils, etc... et aussi les articles faisant parti de la
table "article" qui ne sont pas détectés (donc pas présents dans "article_detecte") en leur attribuant la quantité zéro pour signifier la rupture.
Après même si la quantité zéro n'est pas envisageable car infaisable avec un COUNT, il faudrait au moins avoir un signe distinctif pour ces articles en rupture (par exemple un champ à NULL
pour ces articles en question) pour que je puise faire un traitement dans le logiciel par la suite pour afficher la valeur zéro.
Voici à partir de ces tables ce que j'aimerais obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 cug libelle Nom Rayon id_Zone Réelle id_Zone Théorique seuilbas seuilhaut quantité 111114 Chemise Rouge L NULL NULL 3 3 7 0 111114 Chemise Rouge XL NULL NULL 3 2 5 0 111113 Jean Noir L Rayon 2 2 2 2 5 2 111113 Jean Noir L Rayon 3 3 2 2 5 1 111112 Polo Vert S Rayon 2 2 1 2 8 1 111111 Tee-Shirt Blanc XL Rayon 1 1 1 2 8 1
Avez-vous une idée de la requête qui pourrait me donner ce résultat ? Je nage complètement actuellement, je suis paumé...
Merci d'avance à ceux qui voudront bien me donner un coup de main !
Bonne soirée
Partager