Je veux afficher tout l'ordre de travail pour un client spécifique avec la somme de ce qu'il nous doit.
Mon problème est que, avec ma requête actuelle, dès qu'il y a plus d'un produit ("Table de" Work_Order_Products ' ), Times multiplie par le nombre d'enregistrements renvoyés par la table 'Work_order_Products'. P>
est-il un moyen de surmonter ce problème?
Merci p>
3 Réponses :
J'essaierais une sous-requête corrélée au lieu d'une somme:
Remplacement: p> avec: p>
Dans la ligne de ce que Chris a suggéré, cela pourrait fonctionner: c'est-à-dire, utilisez des parenthèses pour fabriquer des "sous-tables" qui nécessiteront leurs propres alias.
(Il pourrait y avoir des erreurs de syntaxe ici. Je n'ai pas les données pour exécuter cela, bien sûr.) P> p>
Merci Jamie, oui ça marche, mais je préfère la solution Chris, beaucoup plus rapide!
Afin d'éviter le multiplicateur de l'un des work_order_products code> ou des tables code> work_ord_instructions code>, gérez vos agrégations avant de rejoindre les tables.
SELECT
W.ID_WorkOrder AS ID_WorkOrder
,W.Number AS Number
,W.Date AS Date
,C.Name AS Name
,WOP.totProducts
,WOI.totTimes
FROM
Work_Order AS W
LEFT JOIN
(
SELECT
ID_WorkOrder
,SUM(Quantity * Price) AS totProducts
FROM
Work_Order_Products
GROUP BY
ID_WorkOrder
) AS WOP
ON
WOP.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN
(
SELECT
ID_WorkOrder
,SUM(Times) AS totTimes
FROM
Work_Order_Instructions
GROUP BY
ID_WorkOrder
) AS WOI
ON
WOI.ID_WorkOrder = W.ID_WorkOrder
LEFT JOIN
Customers AS C
ON
C.ID_WorkOrder = W.ID_Customer
WHERE
W.ID_Customer = x;
Merci Eric, oui ça marche, mais je préfère la solution Chris, beaucoup plus rapide!
Si vous n'avez pas quitté la jointure (Sélectionnez la somme (Quantité * Prix) du groupe Work_Order_Products par ID_WorkOrder) WOP sur sur wop.id_workorder = w.id_workorder? Je ne peux pas courir la requête mais je pense que cela résout la multiplication. Vous devez faire la même chose avec work_order_instructions. Essayez de commenter le groupe et le SUM-S et la vérification avec JOIN multiplie le nombre de lignes.