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 :

[Hard core SQL] Sum d'un select


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 30
    Points
    30
    Par défaut [Hard core SQL] Sum d'un select
    Bonjour,

    J'essai de calculer la somme des montants facturés des commandes de 2007.

    En clair, pour l'année 2007 j'ai des commandes. A ces commandes j'ai créer des factures, et je veux la somme de toutes ces factures.

    Voici la requête que je voudrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select sum(
    	select coalesce(sum(lf.MONTANT), 0) as a
    	from LIGNE_FACTURE lf, LIGNE_COMMANDE lc 
    	where lf.ID_LIGNE_COMMANDE=lc.ID_LIGNE_COMMANDE and lc.ID_COMMANDE=c.ID_COMMANDE
    	)
    from COMMANDE c
    where year(c.DATE)=2007
    Mais elle plante sous DB2 me disant que je peux pas faire de select dans un sum...

    Si j'enlève le sum, ca fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select (
    	select coalesce(sum(lf.MONTANT), 0) as a
    	from LIGNE_FACTURE lf, LIGNE_COMMANDE lc 
    	where lf.ID_LIGNE_COMMANDE=lc.ID_LIGNE_COMMANDE and lc.ID_COMMANDE=c.ID_COMMANDE
    	)
    from COMMANDE c
    where year(c.DATE)=2007
    mais ca me renvoie la liste des sommes des factures de chaque commande de 2007, et moi je voudrais la somme de tout ça.

    J'ai essayé en mettant le select dans le from, mais là il ne comprend plus qu'il faut relier à la table "c" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select sum(s.a)
    from COMMANDE c, (
    		select coalesce(sum(lf.MONTANT), 0) as a
    		from LIGNE_FACTURE lf, LIGNE_COMMANDE lc 
    		where lf.ID_LIGNE_COMMANDE=lc.ID_LIGNE_COMMANDE and lc.ID_COMMANDE=c.ID_COMMANDE
    	) s
    where year(c.DATE)=2007
    SQL0204N Le nom "c.ID_COMMANDE" n'est pas défini. SQLSTATE=42704
    Est ce que qqun aurait une idée ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Pourquoi pas tout simplement ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT     COALESCE(sum(lf.montant), 0) 
    FROM     commande c
        LEFT JOIN
            ligne_facture lf
            ON lc.id_commande = c.id_commande
        INNER JOIN
            ligne_commande lc
            ON  lf.id_ligne_commande = lc.id_ligne_commande
    WHERE     YEAR(c.DATE) = 2007
    ;

Discussions similaires

  1. [PL/SQL] Stockage d'un select
    Par lapartdombre dans le forum Oracle
    Réponses: 14
    Dernier message: 05/12/2005, 15h19
  2. sql sum()
    Par philippe123 dans le forum ASP
    Réponses: 2
    Dernier message: 20/07/2005, 10h49
  3. [SQL]: Requête NOT IN SELECT(...)
    Par CAPPE dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/06/2005, 14h06
  4. [VB.NET] [SQL] Retour d'un SELECT pour un IF/ELSE
    Par nys_00 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 17/03/2005, 12h50
  5. Réponses: 2
    Dernier message: 22/02/2005, 17h14

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