|
| REQUETE SQL IMBRIQUEE SUR 2 TABLEs |
| Iniciado por j.bossut, 14,mar. 2019 10:21 - 4 respuestas |
| |
| | | |
|
| |
| Publicado el 14,marzo 2019 - 10:21 |
Bonjour, J'ai 2 tables ARTICLE ET LIGNECOMMANDEFR
Je souhaiterais faire une requete sur ces 2 tables mais je n'arrive pas a faire ce que je veux.
Je souhaiterais afficher une liste d'articles avec pour chaque article, le numéro, la date et le numéro de fournisseur de la dernière commande.
Comment faire ? Ci dessous ma requete que j'ai simplifié pour qu'elle soit compréhensible Mon problème c'est qu'elle affiche toute les lignes de commandes Fournisseur
SELECT ARTICLE.CODEARTICLE AS CODEARTICLE , ARTICLE.CODECOMPLEMENTAIRE AS CODECOMPLEMENTAIRE , ARTICLE.LIBELLE1 AS LIBELLE1, ARTICLE.LIBELLE2 AS LIBELLE2, LIGNECOMMANDEFR.NUMERO LIGNECOMMANDEFR.DATECDE LIGNECOMMANDEFR.NUMFR FROM ARTICLE LEFT OUTER JOIN LIGNECOMMANDEFR ON LIGNECOMMANDEFR .CODEARTICLE =ARTICLE.CODEARTICLE AND LIGNECOMMANDEFR .CODECOMPLEMENTAIRE =ARTICLE.CODECOMPLEMENTAIRE WHERE ORDER BY CODEARTICLE ASC, CODECOMPLEMENTAIRE ASC, NUMERODESC |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 68 mensajes |
|
| Publicado el 14,marzo 2019 - 16:41 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 13 mensajes |
|
| Publicado el 14,marzo 2019 - 18:24 |
| as-tu essayer avec INNER JOIN... tu n'aura que ceux ayant concordance |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 72 mensajes |
|
| Publicado el 14,marzo 2019 - 19:15 |
Tu peux faire une sous-requête qui s'exécutera pour chaque ARTICLE. Par contre, on ne peut pas sortir plus de 1 rubriques par sous-requêtes. Donc il faudrait faire un TOP 1 et trier sur ta date de commande. Par contre Windev ne nous permet pas de mettre une rubriques différentes dans la clause ORDER BY de celle dans les sous-requête, il nous renvoie une erreur comme de quoi il y plusieurs rubriques ce qui n'est pas le cas mais bon...
Une méthode de contourner ca ici est de faire un CONCAT(NumeroCmd, RubriqueVoulue) as MonConcat et ensuite de faire un ORDERBY sur MonConcat par ordre Descendant, combiner avec le TOP 1, ca te retourne ta dernière commande.
Dans ton cas tu aurais 3 sous-requête à exécuter alors fait gaffe au performance si tu as beaucoup d'articles et / ou commandes, mais bon à première vu ceci pourrait régler ton problème
SELECT ARTICLE.CODEARTICLE AS CODEARTICLE , ARTICLE.etc...,
(SELECT TOP 1 LIGNECOMMANDEFR.NUMERO as NumCmdConcat // Tu es déjà sur la bonne rubrique alors pas besoin de concat FROM LIGNECOMMANDEFR WHERE LIGNECOMMANDEFR.CODEARTICLE = ARTICLE.CODEARTICLE ORDER BY NumCmdConcat DESC ) as NumeroCmd, (SELECT TOP 1 CONCAT(LIGNECOMMANDEFR.NUMERO, ';', LIGNECOMMANDEFR.DATECDE) as DateCmdConcat FROM LIGNECOMMANDEFR WHERE LIGNECOMMANDEFR.CODEARTICLE = ARTICLE.CODEARTICLE ORDER BY DateCmdConcat DESC ) as DateCmd, (SELECT TOP 1 CONCAT(LIGNECOMMANDEFR.NUMERO, ';', LIGNECOMMANDEFR.NUMFR) as NumfrConcat FROM LIGNECOMMANDEFR WHERE LIGNECOMMANDEFR.CODEARTICLE = ARTICLE.CODEARTICLE ORDER BY NumfrConcat DESC ) as NumfrCmd // etc...
FROM ARTICLE
ORDER BY CODEARTICLE ASC
Sinon tu pourrais aussi faire un Concat des 3 rubriques en commençant par ton numéro de commande pour pouvoir appliquer ton Top 1 (ceci te permettrais de gagner en performance car une seule sous-requête te retournant toute les rubriques dont tu as besoin.
Par contre il faudrait que tu fasse un ExtraitChaine() de tes 3 rubriques manuellement par la suite pour ressortir les résultats voulus
A toi de voir
En espérant t'avoir aider à régler ton problème  |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 299 mensajes |
|
| Publicado el 16,marzo 2019 - 14:52 |
Ce serait intéressant d'avoir un retour. Personnellement j'utilise peu HFSQL et cela m'intéresserait de savoir les performances de ce genre de solution |
| |
| |
| | | |
|
| | | | |
| | |
|