Avis aux experts en SQL - SQL/NoSQL - Programmation
Marsh Posté le 18-06-2009 à 19:45:57
Euh, va falloir la refaire au ralenti là, parce que je vois pas comment à partir d'une requête aussi imbittable, sans explication du modèle, on arriverait à donner une réponse à une question aussi vague
Est-ce que tu peux expliquer ce que c'est sensé faire, ce que ça fait, et où à priori ça déconne ?
Marsh Posté le 19-06-2009 à 09:30:17
allodren a écrit : |
C'est généralement le cas quand une requête ne marche pas. Donc en gros, ta requête ne marche pas, et tu espères avoir une solution avec le peu d'infos que tu fournis ?
Ca m'étonne pas que ça fasse 2 mois que tu n'aies aucune réponse
allodren a écrit : |
Je doute fort que tu trouves des amateurs à la boule de cristal si évoluée qu'elle leur permette de deviner le modèle de ta base
Marsh Posté le 19-06-2009 à 10:23:59
Bonjour,
Merci pour votre attention.
Le but est de calculer un tarif total
J'ai une table ACHAT avec id_prod = produit
ty_doc =type de document
nu_doc=numéro de document
nucdli = commande liée
px_com= prix de la commande
id_prod____ty_doc___ nu_doc___ nucdli___px_com
A___________ BE ____ 13604_____________ 4
B____________ BE ____ 13604 _____________ 4
C_______ ___ CDA ___ 13604 _____________ 3
D_______ ___ CDA ___ 13604 _____________ 3
E_______ ___ CDA ___ 13604 ____________ 2
E ______ ___ CDC ___ 13661 ___ 13604 ___ 3
B ______ ___ CDC ___ 13361 ___ 13604 ___ 2
E ______ ___ CDT ___ 13360 ___ 13604 ___ 1
Mon problème est le suivant :
Je souhaite afficher dans le px_com de CDA le cumul des px_com des CDD et des CDT correspondants (quand "nucdli"="nu_doc" )
Du coup, les CDD et CDT correspondantes au CDA doivent disparaitrent !
Au final on doit obtenir
id_prod____ty_doc___ nu_doc___ nucdli___px_com
E___________ CDA ____13604 _____________6
B____________ BE ____ 13604 _____________ 4
C_______ ___ CDA ___ 13604 _____________ 3
D_______ ___ CDA ___ 13604 _____________ 3
B ______ ___ CDC ___ 13361 ___ 13604 ____ 2
Voici un jeu de test :
Code :
|
Mais prenons la première partie de la requête, sans le WHERE : C'est à l'intérieur que se situe le problème :
Code :
|
Cette requête ne me renvoi pas ttes les lignes ...
Si je retire mon SUM la requête me renvoi bien toutes les lignes ...
Si je mets dans mon " GROUP BY" ttes les critères, cela me renvoi toutes les lignes mais ne me calcule pas la somme.
___On groupe toujours par au moins tous les éléments de la sélection___
Mais dans ce cas : cela ne me calcule pas correctement mon besoin qui est :
Addition des valeurs "px_commande" pour toutes les lignes de ma table qui ont : nucdli = nu_document.
On affiche la somme dans le px_commande de la ligne où se trouve le "nu_document" identique.
Et on ne retient plus la ligne où se trouve le "nucdli" lié.
Ex :
Ma table actuelle est
id_prod | ty_document | nu_document | nucdli | px_commande
A | CDA | 160 | |2
A| CDD | 161 | 160 | 2
A | CDA | 162 | | 2
Je souhaite l' extraire tel que :
A|CDA|160| |4
A|CDA|162||2
Mon premier résultat est l'addition entre la première et seconde ligne qui ont nucdli = nu_document.
---> RÉCAPITULONS:
Dans un premier temps, cette requête regroupe les "nucdli"
(n° commandes liées) et les "nu_document" ( n ° commande ) qui ont les mêmes identifiants ( 2 colonnes dans une même table qui ont les mêmes identifiants).
Dans un second temps, elle est censée additionner les "px_commande" ( le coût des commandes) des regroupements ( au total, il y a 8 regroupement sur 40 664 lignes ).
Étant donnée que ma requête fusionne les "nucdli" et les "nu_document" qui ont les mêmes identifiants, et qu'il y en a 8, la requête devrait me retourner 40 656 lignes.
Or ma requête fait bien la somme et effectue bien la fusion mais ne me renvoi que 40 546 lignes soit une centaine en moins !
Je suis pleinement d'accord avec vous mais je ne dois perdre que 8 lignes (puisqu'il y a 8 ligne où nucdli = nu_document) et non pas 101 !
Lorsque j'ôte cette somme de la requête : J'ai bien toutes mes lignes - 8.
Donc j'ai identifié le calcul comme source de ce problème cornélien.
___________________________________________________________________________________________
Après analyse des groupes
Je me suis rendu compte que lorsque je fais mon calcul, toutes les nu_document qui étaient en double, pour un produit, n'étaient pas pris en compte qu'une seule fois ....
EX :
id_prod | nu_doc
100|160
100|160
100|150
La requête ne me retourne que {100;160 et 100;150}
Voila mes cent lignes manquantes.
Comment les rapatriés ?
J'ai trouver comment les rapatrier mais cela ne me fait pas le calcul de somme :
Code :
Code :
|
Cette requête me renvoie toutes les lignes.
Cependant, cela ne m'additionne pas les lignes qui ont un nucdli=nu_document
Toujours le même problème.
J'ai essayé de tourner le code ci-après de différentes façons, je présente la version la plus cohérente.
J'espère que j'ai été assez clair...
Marsh Posté le 18-06-2009 à 10:46:28
Bonjour tout le monde,
Ca fait 2 mois que je galère avec cette requête, je l'ai posté dans plein de forums et .... personne n'a su encore trouvé de solutions...
Donc s'il vous plaît j'ai besoin de votre aide.
Le but de ma requête est de fusionner les lignes qui ont (nucdli = nu_document) sur les lignes qui ont (nu_document) , d'additionner une de leur colonne : leur prix (px_commande).
Le problème vient que ma requête ne me renvoie pas toutes les lignes.
Voilà : Avis aux amateurs !