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 :

Somme de plusieurs Select


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut Somme de plusieurs Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Somme de plusieurs select

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Si on pouvait avoir la description des champs utiles de vos deux tables, ainsi qu'un petit jeu d'essai ce serait parfait !

  3. #3
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Au passage, tu pourras également formater tes requêtes et mettre des balises code !

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Une solution pourrais ressembler a cela, faisant le groupement dans chaque sous select. C est sans doute a adapter un peu...

    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
    35
    36
    37
    38
    39
    40
     
    SELECT t.iva, (SUM(POT_IVA)+SUM(POT_NVA)+SUM(POT_LG)+SUM(POT_LA)) AS POTENTIAL 
     
    FROM(
     
     -- IVA --
     
        SELECT cus_id_pk iva, sum (nvl (CUS_CUSTOMERPOTENTIAL, 0)) AS pot_iva, 0 AS pot_nva, 0 AS pot_lg, 0 AS pot_la
        FROM customer_t 
        Group by cus_id_pk
     
        Union ALL
     
        -- NVA --
     
        SELECT h.iva, 0 AS pot_iva, sum (nvl (CUS_CUSTOMERPOTENTIAL, 0)) AS pot_nva, 0 AS pot_lg, 0 AS pot_la 
        FROM customer_t c, hierarchy_t h
        WHERE cus_id_pk = h.nva 
    Group by h.iva
     
        Union ALL
     
        -- LG --
     
        SELECT h.iva, 0 AS pot_iva, 0 AS pot_nva, sum (nvl (CUS_CUSTOMERPOTENTIAL,0)) AS pot_lg, 0 AS pot_la 
        FROM customer_t c, hierarchy_t h
        WHERE cus_id_pk =h.lg
     Group by h.iva
        Union ALL
     
        -- LA --
     
        SELECT h.iva, 0 AS pot_iva, 0 AS pot_nva, 0 AS pot_lg, sum (nvl (CUS_CUSTOMERPOTENTIAL,0)) AS pot_la 
     
        FROM customer_t c, hierarchy_t h
     
        WHERE cus_id_pk =h.la 
    group by h.iva
    ) t
    GROUP BY t.IVA

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Est-ce que pour une même IVA un id_client peut se retrouver à plusieurs endroit ?
    Dans votre exemple ce n'est pas le cas, mais est-ce une règle absolue ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    Merci beaucoup pour ta reponse, je comprend mieux maintenant

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    Bounjour Waldar

    Je me suis rendu compte que pour un IVA donné un ID_client peut se retrouver a plusieurs endroits, alors lorsque je fais des regroupement avec le clause GROUP BY il y a les potentiels qui se repetent

    Merci pour la reponse

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Un petit exemple pour illustrer ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT iva,nva,SUM(POT_IVA_LG) AS POT_IVA_NVA
    FROM (
     
    SELECT h.iva,h.nva, lg, sum (c.pot) AS pot_IVA_LG
        FROM hierarchie h  
             INNER JOIN client c
               ON c.id_client IN (h.iva, h.nva, h.lg, h.la)     
    GROUP BY h.iva,h.nva, lg
    ORDER BY h.iva ASC
    )
    Je somme tous les potentiels en les regroupant par nva, j’ai des valeurs trop grandes car il y a des potentiels qui se repetent

    Exemple

    Iva; nva ;lg ; pot
    25; 12 ; 5 ; 100
    25; 12 ; 7 ; 102
    25 ; 12 ; 6 ; 106

    Je veux le potentiel de 25 sachant que le potentiel de nva=12 est compte ici 3 fois (dans 100,102 et 106)et que le potentiel de lg peut egalement être compte plusieurs fois mais ce n’est pas le cas dans cet exemple

    Merci

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    J'ai quand même du mal avec votre besoin, ça change tout le temps !
    Un coup les ID sont uniques, celui d'après ils ne le sont plus, vous avez besoin de regrouper par IVA, puis par IVA / NVA...

    Honnêtement commencer par débrouissailler le problème fonctionnel, quand vous saurez ce que vous voudrez revenez ici, car là j'ai l'impression de perdre mon temps à pondre des requêtes qui ne sont de toutes façons pas adaptées.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    Excusez moi Waldar, c’est vrai que j’ai mal pose le problème

    En fait j’ai besoin de regrouper par IVA mais le problème c’est que pour un IVA on a le meme nva qui se repete et donc son potentiel ce qui gonfle le résultat.

    Exemple

    Iva; nva ; lg ; pot
    25; 12 ; 5 ; 100 = (40+60)
    25; 12 ; 7 ; 102 = (40+62)
    25 ; 12 ; 6 ; 106= (40+66)

    40 étant la valeur de nva=12

    Avec ma requête, le resultat me donne 308 (100+102+106) le potentiel de nva etant pris en compte ici 3 fois

    Or le bon resultat est 228 (40+60+62+66)

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     IVA;  NVA;   LG;   LA
     52;  664;   NULL;  841
     52;  664;   NULL;  842
     52;  664;   NULL;  843
    52;  664;   NULL;  844
    52;  664;   NULL;  845
    52;  669;   92;  846
    52;  669;   92;  847
    52;  669;   92;  848
    52;  669;   92;  849
    52;  674;   10;  850
    52;  674;   10;  851
    52;  699;   10;  852
    52;  656;   10;  853
    52;  656;   10;  NULL
    52;  656;   NULL;  NULL
    NUll;  656;   66;  NULL
    52;  656;   66;  854
    52;  686;   66;  878
    null;  NULL;   66;  857
    52;  686;   66;  858
    52;  686;   66;  895
    52;  686;   66;  860
    932;   74;   95; 861
     84;  464; NULL; NULL
    987; NULL; NULL; NULL
     46;   64;   48; NULL

    les valeurs de LA sont toujours uniques contrairement a IVA,NVA,et LG
    car dernieres feuille de l'arbre
    merci

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Bon, la modélisation étant vraiment mauvaise, la requête n'est pas beaucoup meilleure...
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    with hierarchie as
    (
    select  52 as iva, 664 as nva, null as lg, 841 as la from dual union all 
    select  52       , 664       , null      , 842       from dual union all
    select  52       , 664       , null      , 843       from dual union all
    select  52       , 664       , null      , 844       from dual union all
    select  52       , 664       , null      , 845       from dual union all
    select  52       , 669       , 92        , 846       from dual union all
    select  52       , 669       , 92        , 847       from dual union all
    select  52       , 669       , 92        , 848       from dual union all
    select  52       , 669       , 92        , 849       from dual union all
    select  52       , 674       , 10        , 850       from dual union all
    select  52       , 674       , 10        , 851       from dual union all
    select  52       , 699       , 10        , 852       from dual union all
    select  52       , 656       , 10        , 853       from dual union all
    select  52       , 656       , 10        , null      from dual union all
    select  52       , 656       , null      , null      from dual union all
    select null      , 656       , 66        , null      from dual union all
    select  52       , 656       , 66        , 854       from dual union all
    select  52       , 686       , 66        , 878       from dual union all
    select null      , null      , 66        , 857       from dual union all
    select  52       , 686       , 66        , 858       from dual union all
    select  52       , 686       , 66        , 895       from dual union all
    select  52       , 686       , 66        , 860       from dual union all
    select 932       ,  74       , 95        , 861       from dual union all
    select  84       , 464       , null      , null      from dual union all
    select 987       , null      , null      , null      from dual union all
    select  46       ,  64       , 48        , null      from dual
    )
      ,  client as
    (
    select  52 as clid, 'titi' as nom, 100 as pot from dual union all
    select 932        , 'toto'       , 645        from dual union all
    select 841        , 'lili'       , 847        from dual union all
    select 842        , 'laLA'       , 635        from dual union all
    select 848        , 'tete'       , 635        from dual union all
    select  64        , 'tete'       , 832        from dual union all
    select  66        , 'tutu'       , 344        from dual union all
    select 847        , 'dalid'      , 772        from dual union all
    select  95        , 'dad'        , 625        from dual union all
    select  44        , 'cici'       ,  97        from dual union all
    select  84        , 'nico'       , 827        from dual union all
    select 464        , 'nene'       , 938        from dual union all
    select  48        , 'jojo'       , 763        from dual union all
    select 850        , 'nana'       , 837        from dual union all
    select 851        , 'test'       , 150        from dual
    )
      ,  iva_d as
    (
    select distinct iva from hierarchie
    )
      ,  nva_d as
    (
    select distinct iva, nva from hierarchie
    )
      ,  nva_p as
    (
      select h.iva, coalesce(sum(c.pot), 0) as pot_nva
        from nva_d h
             left outer join client c
               on c.clid = h.nva
    group by h.iva
    )
      ,  lg_d as
    (
    select distinct iva, lg from hierarchie
    )
      ,  lg_p as
    (
      select h.iva, coalesce(sum(c.pot), 0) as pot_lg
        from lg_d h
             left outer join client c
               on c.clid = h.lg
    group by h.iva
    )
      ,  la_p as
    (
      select h.iva, coalesce(sum(c.pot), 0) as pot_la
        from hierarchie h  
             left outer join client c
               on c.clid = h.la
    group by h.iva
    )
      select i.iva,
             sum(n.pot_nva + g.pot_lg + a.pot_la + coalesce(c.pot, 0)) as pot_tot
        from iva_d i
             inner join nva_p n
               on coalesce(n.iva, -1) = coalesce(i.iva, -1)
             inner join lg_p g
               on coalesce(g.iva, -1) = coalesce(i.iva, -1)
             inner join la_p a
               on coalesce(a.iva, -1) = coalesce(i.iva, -1)
             left outer join client c
               on c.clid = i.iva
    group by i.iva
    order by 1 asc nulls first;
     
    IVA	POT_TOT
    	344
    46	1595
    52	4320
    84	1765
    932	1270
    987	0

  14. #14
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    J'ai trouvé une requête beaucoup plus simple :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    with hierarchie as
    (
    select  52 as iva, 664 as nva, null as lg, 841 as la from dual union all 
    select  52       , 664       , null      , 842       from dual union all
    select  52       , 664       , null      , 843       from dual union all
    select  52       , 664       , null      , 844       from dual union all
    select  52       , 664       , null      , 845       from dual union all
    select  52       , 669       , 92        , 846       from dual union all
    select  52       , 669       , 92        , 847       from dual union all
    select  52       , 669       , 92        , 848       from dual union all
    select  52       , 669       , 92        , 849       from dual union all
    select  52       , 674       , 10        , 850       from dual union all
    select  52       , 674       , 10        , 851       from dual union all
    select  52       , 699       , 10        , 852       from dual union all
    select  52       , 656       , 10        , 853       from dual union all
    select  52       , 656       , 10        , null      from dual union all
    select  52       , 656       , null      , null      from dual union all
    select null      , 656       , 66        , null      from dual union all
    select  52       , 656       , 66        , 854       from dual union all
    select  52       , 686       , 66        , 878       from dual union all
    select null      , null      , 66        , 857       from dual union all
    select  52       , 686       , 66        , 858       from dual union all
    select  52       , 686       , 66        , 895       from dual union all
    select  52       , 686       , 66        , 860       from dual union all
    select 932       ,  74       , 95        , 861       from dual union all
    select  84       , 464       , null      , null      from dual union all
    select 987       , null      , null      , null      from dual union all
    select  46       ,  64       , 48        , null      from dual
    )
      ,  client as
    (
    select  52 as clid, 'titi' as nom, 100 as pot from dual union all
    select 932        , 'toto'       , 645        from dual union all
    select 841        , 'lili'       , 847        from dual union all
    select 842        , 'laLA'       , 635        from dual union all
    select 848        , 'tete'       , 635        from dual union all
    select  64        , 'tete'       , 832        from dual union all
    select  66        , 'tutu'       , 344        from dual union all
    select 847        , 'dalid'      , 772        from dual union all
    select  95        , 'dad'        , 625        from dual union all
    select  44        , 'cici'       ,  97        from dual union all
    select  84        , 'nico'       , 827        from dual union all
    select 464        , 'nene'       , 938        from dual union all
    select  48        , 'jojo'       , 763        from dual union all
    select 850        , 'nana'       , 837        from dual union all
    select 851        , 'test'       , 150        from dual
    )
      ,  all_cli as
    (
      select distinct h.iva, c.clid
        from hierarchie h  
             left outer join client c
               on c.clid in (h.iva, h.nva, h.lg, h.la)
    )
    select ac.iva, sum(coalesce(cl.pot,0)) as pot_tot
      from all_cli ac
           left outer join client cl
             on cl.clid = ac.clid
    group by ac.iva
    order by ac.iva asc nulls first;
     
    IVA	POT_TOT
    	344
    46	1595
    52	4320
    84	1765
    932	1270
    987	0

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par défaut
    Merci Waldar,

    Votre réponse a bien résolu mon problème

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez créer un exemple en modifiant cette table hierarchie qu'on a déjà utilisé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Table HIERARCHIE (du client)
     
    IVA;  NVA;   LG;   LA
     52;  664;   66;  847
    932;   74;   95;   44
     84;  464; null; null
    987; null; null; null
     46;   64;   48; null

Discussions similaires

  1. Evenement Jlist plusieurs selection
    Par Blast dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 17h44
  2. plusieurs selections selon sur colonne different critere
    Par richton95 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/01/2006, 17h25
  3. [CR] probleme de somme sur plusieurs pages
    Par d@rthwing dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 26/08/2005, 14h31
  4. Plusieurs SELECT dans l'ouverture d'une connection
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 01/04/2005, 11h09
  5. [math] somme de plusieurs vecteurs à 3 dimensions
    Par teska dans le forum Mathématiques
    Réponses: 5
    Dernier message: 04/06/2003, 21h40

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