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 :

Probleme de group


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut Probleme de group
    Bonjour,
    j'ai une table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mois | montant
    01 |  2
    01 |  1
    02 |  6
    03 |  4
    03 |  2
    04 |  2
    05 |  5
    je voudrais obtenir pour chaque mois, le montant total de ce mois, plus le montant des deux mois précédent.

    j'aurais ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mois  total
    01 | 3 (1+2)
    02 | 9 (6+1+2)
    03 | 15 (2+4+6+1+2)
    04 | 14 (2+2+4+6)
    05 | 13 (5+2+2+4)
    c'est possible en une seule requete ?
    Merci,
    Tata

  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
    Rapidement, en deux passes :
    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
    select
        mois,
        sum(mnt) over(order by mois asc ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) cumul
    from
    (
        select mois, sum(montant) mnt
        from
        (
            select '01' as mois, 2 as montant from dual union all
            select '01', 1 from dual union all
            select '02', 6 from dual union all
            select '03', 4 from dual union all
            select '03', 2 from dual union all
            select '04', 2 from dual union all
            select '05', 5 from dual
        )
        group by mois
        order by mois asc
    )
    order by
        mois asc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MOIS	CUMUL
    01	3
    02	9
    03	15
    04	14
    05	13

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    oh punaise...ca a l'air compliqué.
    et sans utiliser le over, avec du SQL plus conventionnel, tu crois que c'est possible ?

  4. #4
    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
    Oui ça doit être possible mais je pense que ce serait beaucoup plus compliqué.

    Qu'est-ce qui vous rebute avec la fonction analytique, pas d'Oracle Enterprise sous la main ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    Non, c'est une requete qui sera générée par business objects, donc avec du SQL assez standard.
    Je ne vais pas exécuter moi meme la requete donc, mais j'ai besoin de savoir à quoi ca peut ressembler en SQL.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par tatayoyo Voir le message
    oh punaise...ca a l'air compliqué.
    et sans utiliser le over, avec du SQL plus conventionnel, tu crois que c'est possible ?
    Oui c'est plus compliqué
    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
     
    with tab as
    (
      SELECT '01' AS mois, 2 AS montant FROM dual union ALL
      SELECT '01', 1 FROM dual union ALL
      SELECT '02', 6 FROM dual union ALL
      SELECT '03', 4 FROM dual union ALL
      SELECT '03', 2 FROM dual union ALL
      SELECT '04', 2 FROM dual union ALL
      SELECT '05', 5 FROM dual
    ), 
    pivot as
    (
      select level as x from dual connect by level <= 3
    ), 
    data as
    (
    select mois, montant, case when mois = '01' and x = 1 then 1
                               when (mois = '02' and x = 1) or (mois = '01' and x = 2) then 2
                               when (mois = '03' and x = 1) or (mois = '02' and x = 2) or (mois = '01' and x = 3) then 3
                               when (mois = '04' and x = 1) or (mois = '03' and x = 2) or (mois = '02' and x = 3) then 4
                               when (mois = '05' and x = 1) or (mois = '04' and x = 2) or (mois = '03' and x = 3) then 5
                          end grp
      from tab, pivot  
    ) 
    select max(mois), sum(montant) 
      from data
     where grp is not null
     group by grp

  7. #7
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour,

    C'est tout a fait possible sous Standard Edition et en sql

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT   mois ,
             SUM(SOMME) over (ORDER BY mois rows BETWEEN 2 preceding AND CURRENT row) AMOUNT
    FROM
             (SELECT DISTINCT mois ,
                              SUM(montant) over(partition BY mois ) SOMME
             FROM             tab_c
             GROUP BY         mois ,
                              montant
             ORDER BY         mois
             )
    GROUP BY mois,
             SOMME;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
         MOIS     AMOUNT
    --------- ----------
            1          3
            2          9
            3         15
            4         14
            5         13

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par fatsora Voir le message
    Bonjour,

    C'est tout a fait possible sous Standard Edition et en sql
    ...
    T'as testé en Oracle 8 ?

  9. #9
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Citation Envoyé par mnitu Voir le message
    T'as testé en Oracle 8 ?
    Hehe ...

    C'est plus au programme oracle 8,

    d'ailleurs...

    J'ai vu que tu code en dur tes with ....

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH region_sales AS
         (SELECT DISTINCT mois ,
                                           SUM(montant) over(partition BY mois) AMOUNT
                          FROM             tab_c
                          GROUP BY         mois ,
                                           montant
                          ORDER BY         mois
         )
    SELECT   mois ,
             SUM(amount) over (ORDER BY mois rows BETWEEN 2 preceding AND CURRENT row) somme
    en plus tu utilises pivot ...

    et toi tu as testé en Oracle 5 ?

  10. #10
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par fatsora Voir le message
    ;;;
    J'ai vu que tu code en dur tes with ....

    en plus tu utilises pivot ...

    et toi tu as testé en Oracle 5 ?


    Il me semble qu’un Oracle8 dans l’édition Standard il n’y avait pas des fonctions analytiques. Donc t'as testé ?

  11. #11
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Non man vu qu'il n'y a pas d'analytique tout court en < 9I ...


    par contre ...

    En 9i analytique est bien present en standard edition

    Bon maintenant , il faut se mefier, on a tellement d'exemple de personnes qui utlisent encore Oracle 6,7 ici ...


    Donc ce que j'ai donné la est valable a partir de 9I SE

  12. #12
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par fatsora Voir le message
    Non man vu qu'il n'y a pas d'analytique tout court en < 9I ...
    T'as mal vu fatsora, il y a bien des analytiques en Oracle 8.

    Et c'est que "t'as donnée" c'est la même chose que Waldar.

  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
    Pas tout à fait, ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT mois, SUM(montant) over(partition BY mois ) SOMME
    FROM     tab_c
    GROUP BY mois , montant
    ORDER BY mois
    Est plus complexe syntaxiquement - bien qu'équivalent en résultat - à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select   mois, sum(montant) mnt
    from     tab_c
    group by mois
    order by mois asc
    Quant aux fontions analytiques vous avez tort tous les deux : elles sont arrivées avec la version 8i

  14. #14
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    [Edit]
    Il y a la même fonction analytique dans les deux .
    [/Edit]

    Citation Envoyé par Waldar Voir le message
    ...
    Quant aux fontions analytiques vous avez tort tous les deux : elles sont arrivées avec la version 8i
    Bien vu

Discussions similaires

  1. [CR XI] Probleme de groupe
    Par tatayoyo dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 22/03/2007, 14h18
  2. bonjour probleme de groupe
    Par CROSS dans le forum Oracle
    Réponses: 3
    Dernier message: 04/12/2006, 22h42
  3. probleme avec group by
    Par dirtyjs dans le forum Access
    Réponses: 1
    Dernier message: 01/09/2006, 03h40
  4. probleme de group by
    Par logone dans le forum Requêtes
    Réponses: 5
    Dernier message: 24/06/2006, 10h43
  5. Probleme de GROUP BY
    Par Golork dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 19h46

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