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

Développement SQL Server Discussion :

2 Sum mais "Impossible d'exécuter une fonction d'agrégation" [2014]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Par défaut 2 Sum mais "Impossible d'exécuter une fonction d'agrégation"
    Bonjour,

    Cela fait à présent 2 jours que je me bats avec une requête SQL.
    Je suis persuadée que cet enfantin mais a force de tourner en rond, ca m'énerve et plus je m'énerve moins ca va !
    Alors je viens chercher de l'aide précieuse.

    Je possède une table FACTURE qui contient des Facture avec les champs suivants (en résumé)
    TABLE FACTURE
    Champ Numero
    Champ Facturation
    Champ TotalTTC

    Ensuite je possède une table REGLEMENT qui contient tous les règlements associés aux factures.
    TABLE REGLEMENT
    Champ IDREGLEMENT
    Champ Numero (en lien avec table FACTURE)
    Champ Montant (Montant réglé par le reglement).

    Je souhaite connaître pour un client, l'encours de ce dernier.

    Avec la requête suivante j'obtiens le RESTE à payer pour chaque facture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (Interfacture.TotalTTC- ISNULL((SELECT Sum(Montant) FROM Reglement WHERE Reglement.Numero=Facture.Numero),0)) AS Reste 
    from Facture 
    Where Facture.FACTURATION ='NomCLient'
    J'obtiens tout sous la forme de
    Reste
    1 67,26
    2 0,00
    3 0,00
    4 0,00
    5 100,33

    Ce que je désire avoir c'est directement 167.59.
    J'ai bien tentée de rajouter un SUM en faisant ceci, pour faire la somme des valeurs, mais la j'obtiens un gentil :
    Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUM(Interfacture.TotalTTC- ISNULL((SELECT Sum(Montant) FROM Reglement WHERE Reglement.Numero=Facture.Numero),0)) AS Reste 
    from Facture
    Where Facture.FACTURATION ='NomCLient'


    Vous remerciant par avance pour vos réponses et votre aide a cette prise de tete

  2. #2
    Invité
    Invité(e)
    Par défaut
    je vous renvoie sur les tutoriels disponibles ici :
    http://sql.developpez.com/#apprendre-sql
    • Les jointures, ou comment interroger plusieurs tables
    • Groupage, ensembles et sous ensembles

  3. #3
    Membre averti
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Par défaut
    Bonjour,

    Tout d'abord merci pour votre réponse.
    Ce n'est pas faute d'avoir deja cherché et parcouru ce document (certes rapidement je dois l'avouer ! car il est tres complet et complexe)

    Je vais a nouveau parcourir le document mais j'avais essayé de mettre un GROUP BY a la fin en triant sur le IDFACTURATION mais sans grande réussite.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Essayez ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT SUM(A.Reste) 
    FROM ( 
    		SELECT (  Facture.TotalTTC - ISNULL((SELECT Sum(Montant) 
    				                                 FROM Reglement 
    				                                 WHERE Reglement.Numero=Facture.Numero),0)) AS Reste 
    		from Facture 
    		Where Facture.FACTURATION ='NomCLient'
    	 ) A

    Il s'agit d'une solution rapide réutilisant votre code. Mais, ce n'est pas la meilleure méthode !

    Vous pouvez améliorer considérablement les performances de la requête en agrégeant préalablement par facture les "Reste à payer" dans une CTE (Common Table Expression) établie sur la table des règlements (Reglement), en faisant un SUM(Montant) AS Montant_Regle et un GROUP BY sur Reglement.Numero, puis établir une jointure entre la CTE et la table des factures (Facture) comme suit (CTE.Numeo = Facture.Numero) et en suite, dans la clause SELECT faire un SUM(Facture.TotalTTC - CTE.Montant_Regle) AS Reste_A_Regler.

    Je vous laisse faire la manip proprement, vous verrez ce n'est pas difficile.

    A+

  5. #5
    Membre averti
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Par défaut
    Bonjour,

    Merci pour le soin apporté à votre réponse.
    Je viens d'apprendre des termes inconnu ... CTE mais je vais m'y pencher car au regard des nombreuses lignes contenus dans la table facture, les temps de réponse sont primordiaux.
    Encore merci pour votre retour,
    Cordialement,

  6. #6
    Membre averti
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Par défaut
    Hamid, félicitation également pour ton site que je suis en train de parcourir et que je trouve très pédagogue.

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

Discussions similaires

  1. [CR XI] Impossible d'exécuter une requête SQL
    Par staika dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/08/2009, 10h32
  2. Réponses: 4
    Dernier message: 01/07/2009, 13h37
  3. [MySQL] Impossible d'exécuter une requête
    Par jlb59 dans le forum PHP & Base de données
    Réponses: 31
    Dernier message: 17/04/2008, 15h12
  4. MySQL 5 : Impossible d'exécuter une requête
    Par SebastienM dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/11/2007, 18h18
  5. Impossible d'exécuter une requete sql
    Par rimbaut dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/08/2007, 18h56

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