IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Fusionner 3 requêtes avec un SUM en une seule


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Fusionner 3 requêtes avec un SUM en une seule
    Bonjour j'ai un problème avec 3 requêtes que j'aimerai fusionner en une seule pour faire une vue.

    Voici les 3 requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT     idtiefact AS client, SUM(montantTTC) AS MontantTotalPieces
    FROM         mgdis.V_PIECESCOMPTECLIENT
    GROUP BY idtiefact) AS PIECESCLIENT
    Qui retourne le montant total des factures de chaque client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (SELECT     V_PIECESCOMPTECLIENT.idtiefact AS client, SUM(V_REGLEMENTS_PAR_PIECE.mtreg) AS ReglementsLettresPiece
    FROM         V_PIECESCOMPTECLIENT INNER JOIN
                          V_REGLEMENTS_PAR_PIECE ON V_PIECESCOMPTECLIENT.idpiece = V_REGLEMENTS_PAR_PIECE.idpiece AND 
                          V_PIECESCOMPTECLIENT.idport = V_REGLEMENTS_PAR_PIECE.idport
    GROUP BY V_PIECESCOMPTECLIENT.idtiefact) AS REGLEMENTSCLIENT
    Qui ressort le montants total réglé par chaque client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (SELECT     idtiefact AS client, SUM(mtecheance) AS MontantEcheancesAVenir
    FROM         V_ECHEANCESCOMPTECLIENT
    GROUP BY idtiefact) AS ECHEANCESAVENIR
    Qui rend les échéances à venir

    Je dois calculer dans ma vue le solde de chaque client, qui est égale à :

    SOLDE=MONTANT_TOTAL_FACTURES - MONTANT_TOTAL_REGLEMENTS - MONTANT_TOTAL_ECHEANCES_A_VENIR

    Le problème c'est que je dois aussi faire une restriction sur la date des échéance (ie WHERE dateEcheance > DateAujourdhui) afin de ne retirer que les échéances non dûes à ce jour.

    Voilà, donc j'aimerai que tout cela tienne en une seule requête.

    Merci[/code]

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT F.Client, MontantTotalPieces, ReglementsLettresPiece, MontantEcheancesAVenir FROM
    (SELECT     idtiefact AS client, SUM(montantTTC) AS MontantTotalPieces 
    FROM         mgdis.V_PIECESCOMPTECLIENT 
    GROUP BY idtiefact) AS PIECESCLIENT) F,
    (SELECT     V_PIECESCOMPTECLIENT.idtiefact AS client, SUM(V_REGLEMENTS_PAR_PIECE.mtreg) AS ReglementsLettresPiece 
    FROM         V_PIECESCOMPTECLIENT INNER JOIN 
                          V_REGLEMENTS_PAR_PIECE ON V_PIECESCOMPTECLIENT.idpiece = V_REGLEMENTS_PAR_PIECE.idpiece AND 
                          V_PIECESCOMPTECLIENT.idport = V_REGLEMENTS_PAR_PIECE.idport 
    GROUP BY V_PIECESCOMPTECLIENT.idtiefact) R,
    (SELECT     idtiefact AS client, SUM(mtecheance) AS MontantEcheancesAVenir 
    FROM         V_ECHEANCESCOMPTECLIENT 
    GROUP BY idtiefact) E
    WHERE F.Client = R.Client
    AND F.Client = E.Client
    J'ai mis la jointure en vrac pour que cela soit plus lisible (et plus facile à copier/coller), à toi de voir s'il faut mettre des INNER JOIN ou des OUTER JOIN
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci, j'ai un peu adapté ta requête et ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT PIECESCLIENT.Client, MontantTotalPieces - ReglementsLettresPiece - MontantEcheancesAVenir AS SoldeClient FROM
    (SELECT     idtiefact AS client, SUM(montantTTC) AS MontantTotalPieces
    FROM         mgdis.V_PIECESCOMPTECLIENT
    GROUP BY idtiefact) AS PIECESCLIENT LEFT OUTER JOIN
    (SELECT     V_PIECESCOMPTECLIENT.idtiefact AS client, SUM(V_REGLEMENTS_PAR_PIECE.mtreg) AS ReglementsLettresPiece
    FROM         V_PIECESCOMPTECLIENT INNER JOIN
                          V_REGLEMENTS_PAR_PIECE ON V_PIECESCOMPTECLIENT.idpiece = V_REGLEMENTS_PAR_PIECE.idpiece AND
                          V_PIECESCOMPTECLIENT.idport = V_REGLEMENTS_PAR_PIECE.idport
    GROUP BY V_PIECESCOMPTECLIENT.idtiefact) AS  REGLEMENTSCLIENT ON PIECESCLIENT.client = REGLEMENTSCLIENT.client LEFT OUTER JOIN
    (SELECT     idtiefact AS client, SUM(mtecheance) AS MontantEcheancesAVenir
    FROM         V_ECHEANCESCOMPTECLIENT
    WHERE V_ECHEANCESCOMPTECLIENT.dtecheance > convert(varchar(10),getdate(),111)
    GROUP BY idtiefact) AS ECHEANCESAVENIR ON PIECESCLIENT.client = ECHEANCESAVENIR.client

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci, j'ai un peu adapté ta requête et ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT PIECESCLIENT.Client, MontantTotalPieces - ReglementsLettresPiece - MontantEcheancesAVenir AS SoldeClient FROM
    (SELECT     idtiefact AS client, SUM(montantTTC) AS MontantTotalPieces
    FROM         mgdis.V_PIECESCOMPTECLIENT
    GROUP BY idtiefact) AS PIECESCLIENT LEFT OUTER JOIN
    (SELECT     V_PIECESCOMPTECLIENT.idtiefact AS client, SUM(V_REGLEMENTS_PAR_PIECE.mtreg) AS ReglementsLettresPiece
    FROM         V_PIECESCOMPTECLIENT INNER JOIN
                          V_REGLEMENTS_PAR_PIECE ON V_PIECESCOMPTECLIENT.idpiece = V_REGLEMENTS_PAR_PIECE.idpiece AND
                          V_PIECESCOMPTECLIENT.idport = V_REGLEMENTS_PAR_PIECE.idport
    GROUP BY V_PIECESCOMPTECLIENT.idtiefact) AS  REGLEMENTSCLIENT ON PIECESCLIENT.client = REGLEMENTSCLIENT.client LEFT OUTER JOIN
    (SELECT     idtiefact AS client, SUM(mtecheance) AS MontantEcheancesAVenir
    FROM         V_ECHEANCESCOMPTECLIENT
    WHERE V_ECHEANCESCOMPTECLIENT.dtecheance > convert(varchar(10),getdate(),111)
    GROUP BY idtiefact) AS ECHEANCESAVENIR ON PIECESCLIENT.client = ECHEANCESAVENIR.client

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [iReport] requête avec un paramètre d'une classe
    Par Elasnaoui dans le forum Documents
    Réponses: 0
    Dernier message: 17/09/2009, 17h54
  2. Requête avec un critère appartenant à une liste déroulante
    Par liloudris dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 16/09/2009, 05h14
  3. Requête avec plusieurs SUM
    Par jgfa9 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/06/2009, 16h06
  4. requête avec la somme d'une colonne et un GROUP BY
    Par xenos dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/09/2007, 14h03
  5. Requête avec fonction Sum
    Par freud dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/02/2007, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo