|
| Iniciado por Esteban VENANT, 13,nov. 2019 14:12 - 5 respuestas |
| |
| | | |
|
| |
Miembro registrado 11 mensajes |
|
| Publicado el 13,noviembre 2019 - 14:12 |
Bonjour,
Je souhaite faire une fenêtre de recherche multicritères pour ma CRM mais je bloque sur certains points concernant la requête finale après sélection des critères de recherche.
Par exemple, je souhaite rechercher une société. J'ai donc une liste de critères de recherche possible qui apparait. Je sélectionne mon critère, ma condition (Commence par / égal / se termine par etc.) et je saisie ma valeur. J'ajoute ensuite autant de critères que je souhaite. Jusque là tout va bien.
Le problème c'est quand je veux sélectionner plusieurs fois le même critère pointant sur une table intermédiaire, je n'arrive pas à construire la requête. Voici un exemple, ça sera plus clair :
J'ai par exemple ma table société : SOCcode / SOCnom 1 Soc1 2 Soc2 3 Soc3
Une table mots clés : MCLEcode / MCLEnom 1 Mcle1 2 Mcle2 3 Mcle3
Et ma table intermédiaire Societe_MotsCles : SOCcode / MCLEcode 1 1 1 2 1 3 2 1 3 2
Ici seule la Soc1 possède les 3 mots clés.
J'ai ensuite sur le même principe une table famille de produits : FAMPcode / FAMPnom 1 Famille1 2 Famille2
et ma table intermédiaire Societe_FamilleProduit : SOCcode / FAMPcode 1 1 1 2 2 1 2 2 3 1
Ici seules Soc1 et Soc2 possèdent les deux familles de produits
Je cherche par exemple à récupérer les sociétés qui possèdent à la fois les mots clés 1 2 et 3 ET les familles de produits 1 et 2. Donc ici dans l'exemple uniquement Soc1, mais impossible de construire la requête...
J'avais pensé à cette requête ci dessous mais l'union ne me donne pas le résultat attendu, l'Intersect aurait peut-être fait l'affaire mais windev ne l'accepte pas :
SELECT Societe.SOCcode, COUNT(*) AS NB FROM Societe, Societe_FamilleProduit WHERE Societe.SOCcode = Societe_FamilleProduit.SOCcode AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP BY Societe.SOCcode HAVING NB =2 UNION SELECT Societe.SOCcode, COUNT(*) AS NB FROM Societe, MotsCles WHERE Societe.SOCcode = MotsCles.SOCcode AND MotsCles.MCLEnom IN ('1','2','3') GROUP BY Societe.SOCcode HAVING NB =3
Dans cette requête je récupère Soc1 + Soc2 dans la première partie de la requête puis Soc1 dans la seconde partie, donc mon résultat final avec l'UNION me donne Soc1 et Soc2 alors que je souhaite récupérer uniquement Soc1.
J'espère avoir été le plus clair possible, je ne suis pas un spécialiste alors peut-être que la solution est évidente mais je n'arrive pas à la trouver malgré pas mal de recherche.
Merci d'avance
CordialementMensaje modificado, 13,noviembre 2019 - 14:14 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 11 mensajes |
|
| Publicado el 13,noviembre 2019 - 14:22 |
Petites corrections de la requête ci-dessus que j'avais adapté pour correspondre à l'exemple :
SELECT Societe.SOCcode, COUNT(*) AS NB FROM Societe, Societe_FamilleProduit WHERE Societe.SOCcode = Societe_FamilleProduit.SOCcode AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP BY Societe.SOCcode HAVING NB =2 UNION SELECT Societe.SOCcode, COUNT(*) AS NB FROM Societe, Societe_MotsCles WHERE Societe.SOCcode = Societe_MotsCles.SOCcode AND Societe_MotsCles.MCLEcode IN ('1','2','3') GROUP BY Societe.SOCcode HAVING NB =3
Sorry du double post et merci à ceux qui pourront m'aiderMensaje modificado, 13,noviembre 2019 - 14:25 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 13,noviembre 2019 - 16:11 |
Quelque chose comme ça ne fonctionne pas ?
SELECT Societe.SOCcode, COUNT(*) AS NB FROM Societe, Societe_FamilleProduit, Societe_MotsCles WHERE Societe.SOCcode = Societe_FamilleProduit.SOCcode AND Societe.SOCcode = Societe_MotsCles.SOCcode AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP BY Societe.SOCcode HAVING NB =2 AND Societe_MotsCles.MCLEcode IN ('1','2','3')
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 326 mensajes |
|
| Publicado el 13,noviembre 2019 - 16:56 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 11 mensajes |
|
| Publicado el 14,noviembre 2019 - 12:23 |
Philippe SB a écrit :
Quelque chose comme ça ne fonctionne pas ?
SELECT Societe.SOCcode, Count(*) AS NB FROM Societe, Societe_FamilleProduit, Societe_MotsCles where Societe.SOCcode = Societe_FamilleProduit.SOCcode AND Societe.SOCcode = Societe_MotsCles.SOCcode AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP by Societe.SOCcode HAVING NB =2 AND Societe_MotsCles.MCLEcode IN ('1','2','3')
-- Cordialement,
Philippe SAINT-BERTIN
Non car cela me donne les sociétés qui ont certes les deux familles de produits (1 et 2) mais qu'avec un seul mot clé parmi la liste (1, 2 ou 3) et non les 3 mots clés inclus. Dans l'exemple ci-dessus j'obtiens donc Soc1 et Soc2 avec cette requête alors que le résultat attendu est uniquement Soc1 (Fam produit 1+2 et Mots clés 1+2+3)
Ndiaga Toure, j'ai regardé mais je ne pense pas que cela résout ce problème ?
Cordialement |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 166 mensajes |
|
| Publicado el 14,noviembre 2019 - 20:30 |
Bonjour
SELECT SOCcode, COUNT(MCLEcode) AS toto FROM Societe_MotsCles GROUP BY SOCcode HAVING toto = ( SELECT COUNT(MCLEcode) AS lolo FROM MotsCles) AND SOCcode IN ( SELECT SOCcode FROM( SELECT SOCcode , COUNT (FAMPcode) AS coco FROM Societe_Famille GROUP BY SOCcode HAVING coco = ( SELECT COUNT (FAMPcode) AS fofo FROM Famille )))
Testée avec un petit jeu de données ça fonctionne.
Bon Dev |
| |
| |
| | | |
|
| | | | |
| | |
|