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

SQL Oracle Discussion :

Problème chargement SCRIPT ORACLE SQL - AGGREGATION PROBLEMATIQUE


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2020
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Problème chargement SCRIPT ORACLE SQL - AGGREGATION PROBLEMATIQUE
    Bonjour à tous,

    J'ai le code suivant

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT   trunc (cons.cod_dat,'yyyy'),
             DECODE (bud.cod_bud, 'PRE', bud.mtt_bud, 0) "MTT_BUD_VOTE",
             cons.COD_SOC,
             DECODE (pro.COD_PRO, '-2', NULL, pro.LIB_PRO) LIB_PRO,
             pat_304,
             pat_305,
             pat_306,
             pat_307,
             pat_308,
             pat_309
     
     
              FROM EDE_PRD.f_bud_budget bud
     
              INNER JOIN EDE_PRD.f_pat_consomme cons
                ON (bud.cod_rbu = cons.cod_rbu AND bud.cod_nat_bud = cons.cod_nat_bud)
     
              LEFT OUTER JOIN EDE_PRD.d_pro_projet pro
                   ON pro.COD_PRO = cons.COD_PRO 
              INNER JOIN EDE_PRD.d_bud_nat_budget nat_bud
                 ON bud.cod_nat_bud = nat_bud.cod_nat_bud 
                       AND nat_bud.cod_nat_bud = cons.cod_nat_bud
                       AND nat_bud.bol_nat_bud_cur = 1
              INNER JOIN EDE_PRD.d_org_rbu rbu
                 ON bud.cod_rbu = rbu.cod_rbu AND rbu.bol_rbu_cur = 1
              INNER JOIN
              EDE_PRD.d_bud_sou_pst_ceg pst_ceg
                 ON     nat_bud.cod_sou_pst_ceg = pst_ceg.cod_sou_pst_ceg
                    AND pst_ceg.bol_sou_pst_cur = 1
              INNER JOIN EDE_PRD.d_bud_pst_ceg h ON pst_ceg.cod_pst_ceg = h.cod_pst_ceg   
     
     
                  WHERE     nat_bud.COD_NAT_BUD IN ('E2001','E0317') AND
                            cons.COD_SOC = 'LMH'
    Les colonnes pat_30* sont des montants.
    Ce code charge correctement mais lorsque je met par exemple sum(pat_304) l'execution du script charge mais le résultat ne s'affiche pas.
    ALors que si je laisse ces colonnes (pat*) de cette manière j'aurai n lignes alors que je voudrais classer calculer la somme de ces montant par an avec la colonne trunc (cons.cod_dat,'yyyy')

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Bonjour,


    Et vous ajoutez bien un GROUP BY... lorsque vous ajoutez les SUM(..) ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOE-MOA Finance
    Inscrit en
    Novembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE-MOA Finance
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 17
    Points : 36
    Points
    36
    Par défaut
    Bonjour
    Si vous voulez regrouper la somme des montants par an, il faut juste extraire l'année et la somme des montants.
    Vous ne pouvez pas extraire d'autres données et c'est logique:
    Pour l'année 2019 par exemple vous avez plusieurs montants PAT_304 que vous allez additionner et afficher la somme.
    Mais pour la donnée COD_SOC par exemple, cette donnée pourrait prendre plusieurs valeurs pour l'année 2019 donc on ne peu.
    Techniquement, dans une requête avec agrégation les colonnes extraites dans le SELECT doivent obligatoirement passer par une fonction d'agrégation (dans notre cas la somme des montants) ou bien être dans le GROUP BY (dans notre cas l'année).

    Code SQL : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    SELECT   trunc (cons.cod_dat,'yyyy'),
     
            -- DECODE (bud.cod_bud, 'PRE', bud.mtt_bud, 0) "MTT_BUD_VOTE",
            -- cons.COD_SOC,
            -- DECODE (pro.COD_PRO, '-2', NULL, pro.LIB_PRO) LIB_PRO,
     
            SUM(pat_304),
            SUM(pat_305),
            SUM(pat_306),
            SUM(pat_307),
            SUM(pat_308),
            SUM(pat_309)
     
     
              FROM EDE_PRD.f_bud_budget bud
     
              INNER JOIN EDE_PRD.f_pat_consomme cons
                ON (bud.cod_rbu = cons.cod_rbu AND bud.cod_nat_bud = cons.cod_nat_bud)
     
              LEFT OUTER JOIN EDE_PRD.d_pro_projet pro
                   ON pro.COD_PRO = cons.COD_PRO 
              INNER JOIN EDE_PRD.d_bud_nat_budget nat_bud
                 ON bud.cod_nat_bud = nat_bud.cod_nat_bud 
                       AND nat_bud.cod_nat_bud = cons.cod_nat_bud
                       AND nat_bud.bol_nat_bud_cur = 1
              INNER JOIN EDE_PRD.d_org_rbu rbu
                 ON bud.cod_rbu = rbu.cod_rbu AND rbu.bol_rbu_cur = 1
              INNER JOIN
              EDE_PRD.d_bud_sou_pst_ceg pst_ceg
                 ON     nat_bud.cod_sou_pst_ceg = pst_ceg.cod_sou_pst_ceg
                    AND pst_ceg.bol_sou_pst_cur = 1
              INNER JOIN EDE_PRD.d_bud_pst_ceg h ON pst_ceg.cod_pst_ceg = h.cod_pst_ceg   
     
     
                  WHERE     nat_bud.COD_NAT_BUD IN ('E2001','E0317') AND
                            cons.COD_SOC = 'LMH'
     
    	GROUP BY trunc (cons.cod_dat,'yyyy');

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/10/2006, 18h27
  2. Chargement table Oracle par SQL Loader
    Par Mike-lb dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 28/08/2006, 12h30
  3. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  4. Problème de traduction de SQL Oracle vers PostgreSQL
    Par Montaigne dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/04/2006, 11h15
  5. SQL + problème de buffer-oracle version 8.1.7
    Par new_wave dans le forum Oracle
    Réponses: 4
    Dernier message: 21/11/2005, 14h51

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