Bonjour,
Je sollicite votre aide afin d'effectuer une imbrication de deux requêtes et ainsi d’obtenir la somme des montants des factures et des avoirs par fournisseur et par date de document.
Mon post peut paraître long mais j’ai essayé de donner un maximum d’informations.
Pour information, j’utilise une base SQL Server 2008 R2 et Reporting Services.
Le schéma ci-dessous représente les liaisons entre les tables et les résultats obtenus pour mes deux requêtes distinctives (avoirs et factures) :
Les expressions SQL de mes requêtes sont les suivantes (les résultats correspondent à mes attentes) :
Avoirs
Factures
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT Entete_Avoir.Nom_fournisseur, SUM(Lignes_Avoir.Montant_ligne) AS A_montant, Entete_Avoir.Date_document AS A_date FROM Entete_Avoir INNER JOIN Fournisseur ON Entete_Avoir.No_fournisseur = Fournisseur.No_ INNER JOIN Lignes_Avoir ON Entete_Avoir.No_ = Lignes_Avoir.No_document GROUP BY Entete_Avoir.Nom_fournisseur, Entete_Avoir.Date_document HAVING (Entete_Avoir.Nom_fournisseur LIKE 'LA POSTE')
Pour simplifier (??), j'ai filtré sur 'La Poste' comme unique fournisseur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT Entete_facture.Nom_fournisseur, SUM(Lignes_facture.Montant_ligne) AS F_montant, Entete_facture.Date_document AS F_date FROM Entete_facture INNER JOIN Fournisseur ON Entete_facture.No_fournisseur = Fournisseur.No_ INNER JOIN Lignes_facture ON Entete_facture.No_ = Lignes_facture.No_document GROUP BY Entete_facture.Nom_fournisseur, Entete_facture.Date_document HAVING (Entete_facture.Nom_fournisseur LIKE 'LA POSTE')
Cela se complique lorsque je veux imbriquer mes deux requêtes afin d’obtenir le résultat suivant :
Je n’obtiens pas le résultat escompté avec la requête suivante :
Résultats obtenus :
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 SELECT * FROM ( SELECT Entete_facture.Nom_fournisseur, SUM(Lignes_facture.Montant_ligne) AS F_montant, Entete_facture.Date_document AS F_date FROM Entete_facture INNER JOIN Fournisseur ON Entete_facture.No_fournisseur = Fournisseur.No_ INNER JOIN Lignes_facture ON Entete_facture.No_ = Lignes_facture.No_document GROUP BY Entete_facture.Nom_fournisseur, Entete_facture.Date_document HAVING (Entete_facture.Nom_fournisseur LIKE 'LA POSTE') )AS FACTURES INNER JOIN ( SELECT Entete_avoir.Nom_fournisseur, SUM(Lignes_Avoir.Montant_ligne) AS A_montant, Entete_avoir.Date_document AS A_date FROM Entete_avoir INNER JOIN Fournisseur ON Entete_avoir.No_fournisseur = Fournisseur.No_ INNER JOIN Lignes_Avoir ON Entete_avoir.No_ = Lignes_Avoir.No_document GROUP BY Entete_avoir.Nom_fournisseur, Entete_avoir.Date_document HAVING (Entete_avoir.Nom_fournisseur LIKE 'LA POSTE') ) AS AVOIRS ON FACTURES.Nom_fournisseur = AVOIRS.Nom_fournisseur
En effet :
- Je souhaiterais que les deux colonnes fournisseurs et les deux colonnes dates soient « fusionnées »
- Je n’ai pas encore essayé de calculer le solde.
De plus, la liaison avec la table « Fournisseur » est-elle nécessaire si je ne souhaite pas obtenir d’information de cette dernière ?
Merci d’avance pour votre aide,
Partager