sql somme des données provenant de plusieurs tables
J'ai 2 tables AP et INV où les deux ont les colonnes [PROJET] et [Value].
Je veux une requête pour revenir à quelque chose comme ceci :
PROJET | SUM_AP | SUM_INV
Je suis venu avec le code ci-dessous mais c'est le retour du mauvais résultats ( somme est faux ).
SELECT AP.[PROJECT],
SUM(AP.Value) AS SUM_AP,
SUM(INV.Value) AS SUM_INV
FROM AP INNER JOIN INV ON (AP.[PROJECT] =INV.[PROJECT])
WHERE AP.[PROJECT] = 'XXXXX'
GROUP BY AP.[PROJECT]
Vous devez vous connecter pour publier un commentaire.
Les résultats de votre requête sont mauvais parce que les valeurs que vous essayez de résumer sont regroupées, ce qui provoque des valeurs en double pour être inclus dans le
SUM
.Vous capable de le résoudre avec un couple de sous-sélectionne:
Si vous avez
N
lignes en AP avec une ID de projet, etM
lignes INV ID, puis la jointure entre les deux tables sur l'ID de projet aura un total deN*M
lignes de ce projet, parce que la même ligne dans la PA sera répété pour chaque ligne INV qui a l'ID de projet, et vice versa. C'est pourquoi votre compte sont le plus susceptibles off (parce que c'est le comptage de la même ligne dans une table donnée à plusieurs reprises en raison de la répétition de la jointure).Au lieu de cela, vous voudrez peut-être essayer de faire une jointure entre les résultats des deux sous-requêtes, dont l'un des groupes de la première table par l'ID de projet et le fait que sa somme, et la deuxième, les groupes de l'autre table par l'ID de projet et ne fait que la somme puis de rejoindre une fois que vous avez seulement 1 ligne avec la somme pour chaque ID de projet.
Si le PROJET est de la table parent, vous devez sélectionner à PARTIR de la table de projet, et de faire une jointure externe gauche sur les deux tables enfants:
Vous pourriez séparer les deux somme des calculs. D'une façon que je peux penser à est de déplacer le calcul des stocks d'une sous-requête, comme:
Parce que le
SummedInv
sous-requête est regroupée surproject
, il est sûr de groupe surSummedInv.SUM_INV
dans la requête externe ainsi.comment au sujet de cette requête :
voici le lien vers la disquette de réparation d'urgence: http://dl.dropbox.com/u/18794525/AUG%207%20DUMP%20STAN.png
Essayer: