Bonjour à toutes et à tous,
Je suis confronté à un souci en SQL, et mon cerveau bute actuellement sans trouver la réponse.
Explications : Je suis sur une BDD Postgresql (v9.6).
Je dois concevoir une requête Sql qui permettra de générer un rapport PDF assez simple.
Mon problème : Lors de ma jointure entre plusieurs tables, une des tables ramène plus de lignes que l'autre. Du coup, mes données sont erronées car le SUM(colonne) se répète plusieurs fois.
Voici la requête qui pose le souci :
Le souci vient de la jointure sur purchase_invoice_delivery.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SELECT COALESCE(SUM(pi.totalweight),0) AS Poids, COALESCE(SUM(pi.totalbrut),0) AS Brut, COALESCE(SUM(pit.value_purchase_invoice_tax),0) AS Tax, (COALESCE(SUM(pi.totalbrut),0)-COALESCE(SUM(pit.value_purchase_invoice_tax),0)) AS Net, (COALESCE(SUM(pi.totalbrut),0) / COALESCE(SUM(pi.totalweight),0)) AS PrixReel, per.aiph AS PrixRef FROM purchase_invoice pi INNER JOIN planter p ON pi.planter_id = p.id INNER JOIN purchase_invoice_tax pit ON pi.id = pit.purchase_invoice_id INNER JOIN purchase_invoice_delivery pid ON pi.id = pid.purchase_invoice_id --Renvoie plusieurs lignes INNER JOIN delivery d ON pid.delivery_id = d.id INNER JOIN period per ON d.period_id = per.id WHERE p.code = '21140' AND pi.date_invoice >= '2020-04-01 00:00:00' AND pi.date_invoice <= '2020-04-30 23:59:59' GROUP BY per.aiph ;
En effet, pour une facture (purchase_invoice), il peut y avoir plusieurs livraisons provenant d'un fermier(table planter).
Et ces livraisons possèdent un prix de référence logé dans la table period.aiph.
Le prix de référence est propre à une période qui est un mois de l'année.
Quand il y a qu'une livraison par facture, pas de souci, tout marche.
En revanche, dès qu'on a plusieurs livraisons, les données sont multipliées par le nombre de livraisons.
Je comprend très bien pourquoi (je veux dire, ça semble logique). Mais je ne trouve pas de moyens pour contourner le problème.
Je suis preneur si une âme bien attentionnée pourra m'aider.
Merci,
Cordialement,
Olivier
Capture 1 : avant d'intégrer le prix de référence
Capture 2 : Après intégration du prix de référence
Partager