PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Problème pour élaborer une requête SQL
Problème pour élaborer une requête SQL
Débuté par jean-christophe.collin, 07 jan. 2024 11:53 - 4 réponses
Posté le 07 janvier 2024 - 11:53
Bonjour à tous !

Je butte pour l'élaboration d'une requête SQL pour extraite des données de plusieurs fichiers...

En simplifiant, j'ai une BD avec 3 fichiers :
- le premier "Postes", liste des postes de travail
- le second "Personnes" liste les personnes qui utilisent les postes de travail (une personne peu utiliser plusieurs postes, un poste peut être utilisé par plusieurs personnes)
- le troisième "Objets" liste des objets utilisés par les personnes avec cependant une précision sur le poste de travail et deux cas de figures possibles :
* cas 1 : l'objet est spécifique à un poste et la rubrique "Poste" du fichier "Objets" contient le nom du poste
* cas 2 : l'objet n'est pas lié à un poste spécifique et la rubrique "Poste" contient 0
MAIS avec la particularité suivante : si pour un utilisateur donné un ou plusieurs objets sont utilisés sur un poste de travail spécifique (cas 1), par exemple le poste n, les autres objets de l'utilisateur non associés à un poste spécifique (cas 2) ne sont pas utilisés sur le poste n.

La requête SQL que je souhaite faire et sur laquelle je butte doit me lister l'ensemble des objets utilisés pour un poste de travail donné.

Voilà un exemple des fichiers avec des données :



La requête pour lister les objets utilisés au poste 1 doit donc me sortir :
- Feutre
- Mouchoir
- Règle
- Gomme
- Verre
- Assiette

J'espère que tout ça n'est pas trop confus !

Merci pour votre aide !

Jean-Christophe
Membre enregistré
151 messages
Posté le 08 janvier 2024 - 15:38
Bonjour,

dans votre exemple , pourquoi Stylo et Papier ne sont ils pas dans le résultat vu qu'ils ont été utilisés par Paul et pas exclusif à un poste ?
Membre enregistré
316 messages
Posté le 08 janvier 2024 - 15:57
Bonjour,

Pour lister les objets utilisés par le poste 1 :
SELECT Objet FROM Objets WHERE Poste=1
OR (Poste=0 AND Personne IN (SELECT Personne FROM Personnes WHERE Poste=1))


Cependant, suis par certain d'avoir compris la particularité que tu décris :
>>>MAIS avec la particularité suivante : si pour un utilisateur donné un ou plusieurs objets sont utilisés sur un poste de travail spécifique (cas 1), >>> par exemple le poste n, les autres objets de l'utilisateur non associés à un poste spécifique (cas 2) ne sont pas utilisés sur le poste n.

Fabrice
Membre enregistré
132 messages
Posté le 08 janvier 2024 - 15:58
Jean-Christophe a écrit :
* cas 1 : l'objet est spécifique à un poste et la rubrique "Poste" du fichier "Objets" contient le nom du poste
* cas 2 : l'objet n'est pas lié à un poste spécifique et la rubrique "Poste" contient 0
MAIS avec la particularité suivante : si pour un utilisateur donné un ou plusieurs objets sont utilisés sur un poste de travail spécifique (cas 1), par exemple le poste n, les autres objets de l'utilisateur non associés à un poste spécifique (cas 2) ne sont pas utilisés sur le poste n.


si je comprend bien : si j'utilise des objet du poste 1 les objet suivant non associer a un poste NE SERONT PAS utiliser sur ce poste ?
dans ce cas comment tu les récupère si il n'y a rien qui dit que j'ai utiliser c'est objet sur ce poste ?

Jean-Christophe a écrit :
> La requête SQL que je souhaite faire et sur laquelle je butte doit me lister l'ensemble des objets utilisés pour un poste de travail donné.

Si tu veut récuperer tout les objet utiliser sur le poste 1 il faut faire
"SELECT * FROM Objet WHERE Poste = Poste 1" (par exemple je ne sais pas comment tu les a écrit en BDD) ^^ en sachant que tu peux ajouter des AND WHERE autant que tu veux


Jean-Christophe a écrit :
La requête pour lister les objets utilisés au poste 1 doit donc me sortir :
- Feutre
- Mouchoir
- Règle
- Gomme
- Verre
- Assiette


tu veux récupérer Règle et Gomme mais ce n'ai pas Paule qui les utilise et ne sont pas utiliser sur le poste 1 ?

tu voulais pas dire plutot que si J'utilise un objet du poste 1 les objet suivant non associer a un poste seront associer au poste 1 (temporairement) ?
Posté le 09 janvier 2024 - 10:59
Il se trouve que Jean-Christophe a formulé :
Bonjour à tous !

Je butte pour l'élaboration d'une requête SQL pour extraite des données de
plusieurs fichiers...

En simplifiant, j'ai une BD avec 3 fichiers :
- le premier "Postes", liste des postes de travail
- le second "Personnes" liste les personnes qui utilisent les postes de
travail (une personne peu utiliser plusieurs postes, un poste peut être
utilisé par plusieurs personnes)
- le troisième "Objets" liste des objets utilisés par les personnes avec
cependant une précision sur le poste de travail et deux cas de figures
possibles :
* cas 1 : l'objet est spécifique à un poste et la rubrique "Poste" du
fichier "Objets" contient le nom du poste
* cas 2 : l'objet n'est pas lié à un poste spécifique et la rubrique "Poste"
contient 0 MAIS avec la particularité suivante : si pour un utilisateur donné
un ou plusieurs objets sont utilisés sur un poste de travail spécifique (cas
1), par exemple le poste n, les autres objets de l'utilisateur non associés
à un poste spécifique (cas 2) ne sont pas utilisés sur le poste n.

La requête SQL que je souhaite faire et sur laquelle je butte doit me lister
l'ensemble des objets utilisés pour un poste de travail donné.

Voilà un exemple des fichiers avec des données :



La requête pour lister les objets utilisés au poste 1 doit donc me sortir : -
Feutre
- Mouchoir
- Règle
- Gomme
- Verre
- Assiette

J'espère que tout ça n'est pas trop confus !

Merci pour votre aide !

Jean-Christophe


bonjour,

il me semble que vous voulez faire ceci:

une 1ère req serait de recup directement les objets lié aux postes

selec O.*
from Postes P inner join Objets O on P.Poste = O.Poste

une 2nde récup les objets liés à aucun poste mais liés à la personne et
le poste associé

select O.*
from
Postes P
inner join Personnes Pe on P.Poste = Pe.Poste
inner join Objets O on Pe.Personne = O.Personne
where
O.Poste is null (ou O.Poste = 0)

si le résutat est correct il faut ensuite faire un UNION du résultat ou
retravailler la req pour en faire une seule

--
Cordialement JeAn-PhI