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 :

Somme des valeurs de certaines lignes


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 93
    Points : 47
    Points
    47
    Par défaut Somme des valeurs de certaines lignes
    Bonjour,

    Bon je pense que cette question ne va pas etre facile a repondre car vous ne connaissez pas le schema de ma base mais je ne recherche pas forcement la solution, juste quelques idees et conseils qui me permettrait d'avancer car la je suis bloque.

    Voici ma requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT BDN.PARENT,C2.CA1,BDN.CODE,
    (SELECT SUM(T.COM) FROM TPHASE T LEFT OUTER JOIN CAWP CA ON T.CAWPID = CA.CAWPID WHERE CA.PROGRAM = '2006HSBC'
    AND  T.PROGRAM = CA.PROGRAM AND BDN.CODE = CA1 AND BDN.BDN_LEVEL = '4' AND CLASS IN ('C1')) AS "Cumulative DrawDown" 
    FROM BDNDETL BDN, CAWP C2
    WHERE BDN.BREAKFILE = '2006CP'
    AND BDN.BDN_LEVEL = '4'
    AND BDN.CODE = C2.CA1
    Order by BDN.PARENT
    qui me donne le resultat suivant:



    En fait ce que j'essaie d'avoir ici c'est une seule ligne pour PARENT avec la somme des valeurs respective dans la derniere colonne.
    Donc par exemple pour "Acquisition/refurbishment" la valeur dans ma dernieres colonne serait egales a la somme des valeurs de 0010 a 0110.

    Cela me donnerait quelque chose de ce type:

    ----------------------------------------------------------------------
    Parent | Cumulative Drawdown
    ----------------------------------------------------------------------
    Acquisition/refurbishment... | Somme des valeurs respectives
    ---------------------------------------------------------------------
    CIBM | Somme des valeurs respectives
    ---------------------------------------------------------------------
    CRE | Somme des valeurs respectives
    ---------------------------------------------------------------------

    Mes valeurs actuelle sont correctes mais pour les CODE/CA1.
    En fait il s'agit d'une arborescence et le PARENT est le parent de CODE/CA1. Les valeurs sont collectees via un logiciel au niveau du CODE/CA1 mais j'ai besoin de generer un rapport de plus haut niveau, donc au niveau du parent (Acquisition/ refurbishment, CIBM )

    Mes colonnes CODE et CA1 sont juste la a titre d'info mais ne seront pas sur le rapport final!

    Est-ce que vous auriez une idee de comment je peux sommer mes differentes valeurs dans la derniere colonne pour chaque Parent.

    Par avance Merci!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Si tu enlèves les colonnes CA1 et CODE et que tu place un group by PARENT, n'obtient tu pas ton résultat?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 93
    Points : 47
    Points
    47
    Par défaut
    Malheureusement non

    ca me donne la chose suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT BDN.PARENT,
    --C2.CA1,BDN.CODE, 
    (SELECT SUM(T.COM) FROM TPHASE T LEFT OUTER JOIN CAWP CA ON T.CAWPID = CA.CAWPID WHERE CA.PROGRAM = '2006HSBC' 
    AND  T.PROGRAM = CA.PROGRAM AND BDN.CODE = CA1 AND BDN.BDN_LEVEL = '4' AND CLASS IN ('C1')) AS "Cumulative DrawDown" 
    FROM BDNDETL BDN, CAWP C2 
    WHERE BDN.BREAKFILE = '2006CP' 
    AND BDN.BDN_LEVEL = '4' 
    AND BDN.CODE = C2.CA1 
    group by BDN.PARENT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Server: Msg 8120, Level 16, State 1, Line 1
    Column 'BDN.CODE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Server: Msg 8120, Level 16, State 1, Line 1
    Column 'BDN.BDN_LEVEL' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Donc je lui ajoute les 2 champs dans le group by:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT BDN.PARENT, 
    (SELECT SUM(T.COM) FROM TPHASE T LEFT OUTER JOIN CAWP CA ON T.CAWPID = CA.CAWPID WHERE CA.PROGRAM = '2006HSBC' 
    AND  T.PROGRAM = CA.PROGRAM AND BDN.CODE = CA1 AND BDN.BDN_LEVEL = '4' AND CLASS IN ('C1')) AS "Cumulative DrawDown" 
    FROM BDNDETL BDN, CAWP C2 
    WHERE BDN.BREAKFILE = '2006CP' 
    AND BDN.BDN_LEVEL = '4' 
    AND BDN.CODE = C2.CA1 
    group by BDN.PARENT, BDN.BDN_LEVEL, BDN.CODE
    Mais voila ce que j'obtiens:



    Voici ce que j'obtiens de facon plus simple:

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT BDN.PARENT,
    --C2.CA1,BDN.CODE,
    (SELECT SUM(T.COM) FROM TPHASE T LEFT OUTER JOIN CAWP CA ON T.CAWPID = CA.CAWPID
    WHERE CA.PROGRAM = '2006HSBC'
    AND  T.PROGRAM = CA.PROGRAM AND BDN.CODE = CA.CA1 AND CLASS IN ('C2')) AS "Cumulative DrawDown" 
     
    FROM BDNDETL BDN, CAWP C2
    WHERE BDN.BREAKFILE = '2006CP'
    AND BDN.BDN_LEVEL = '4'
    AND BDN.CODE = C2.CA1
    order by BDN.PARENT
    Et le resultat:



    Ici je devrais avoir qu'une colonne "ACQUISITION, REFURBISHMENT" avec une valeur de 2300.

    Je sens que je ne suis pas loin mais impossible de voir ou est la faille!
    En esperant qu'une bonne ame me donne la cle du probleme

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    et si tu passais par une sous requete ??

    ca deviendrait un truc dans ce genre :

    select marequete.champ1, sum(Cumulutative DrawDown) from
    (
    SELECT DISTINCT BDN.PARENT as champ1
    --C2.CA1,BDN.CODE,
    (SELECT SUM(T.COM) FROM TPHASE T LEFT OUTER JOIN CAWP CA ON T.CAWPID = CA.CAWPID WHERE CA.PROGRAM = '2006HSBC'
    AND T.PROGRAM = CA.PROGRAM AND BDN.CODE = CA1 AND BDN.BDN_LEVEL = '4' AND CLASS IN ('C1')) AS "Cumulative DrawDown"
    FROM BDNDETL BDN, CAWP C2
    WHERE BDN.BREAKFILE = '2006CP'
    AND BDN.BDN_LEVEL = '4'
    AND BDN.CODE = C2.CA1
    group by BDN.PARENT) marequete
    group by champ1

    Pas sur que ca fonctionne, je n'ai rien pour tester sur mon ordi actuellement et je ne connais pas la syntax de ton SQL (perso j'utilise Oracle) mais bon, normalement ca devrait le faire.
    Bon courage

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 93
    Points : 47
    Points
    47
    Par défaut
    Effectivement le raisonnement semble logique, mais apparemment SQL serveur n'aime pas l'alias:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select marequete.champ1, sum("Cumulutative DrawDown") 
    ( 
    SELECT DISTINCT BDN.PARENT as champ1,
    (SELECT SUM(T.COM) FROM TPHASE T LEFT OUTER JOIN CAWP CA ON T.CAWPID = CA.CAWPID WHERE CA.PROGRAM = '2006HSBC' AND  T.PROGRAM = CA.PROGRAM AND BDN.CODE = CA.CA1 AND CLASS IN ('C2')) AS "Cumulative DrawDown" 
    FROM BDNDETL BDN, CAWP C2
    WHERE BDN.BREAKFILE = '2006CP'
    AND BDN.BDN_LEVEL = '4'
    AND BDN.CODE = C2.CA1
    group by BDN.PARENT) marequete
    group by champ1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Server: Msg 170, Level 15, State 1, Line 9
    Line 9: Incorrect syntax near 'marequete'.
    Le requete a l'avant derniere ligne, il n'aime pas, j'ai essayer AS marequete et AS "marequete" mais ca ne marche pas non plus.

    Est-ce lie a la facon dont SQL serveur gere les Alias? Ou peut-etre ai-je mal compris ta reponse?

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    non non, tu as bien compris ma reponse, cela doit venir de la gestion des alias avec ton SGBD, car c'est ca apparement qui lui pose probleme.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 93
    Points : 47
    Points
    47
    Par défaut
    Merci quand meme, quelqu'un aurait'il l'equivalent sous SQL server?

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/05/2015, 20h57
  2. [XL-2003] Boucler sur des lignes pour placer des valeurs selon certaines conditions
    Par antoine2933 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 31/08/2011, 16h00
  3. Somme des valeurs de certains champs d'un formulaire
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/05/2007, 22h39
  4. fonction sur la somme des valeurs issues d'une requete
    Par iam dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/06/2006, 21h35
  5. [displaytag] Utilisation des valeurs de la ligne courante
    Par ADIDASman dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/11/2005, 13h43

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