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

Oracle Discussion :

[Sql]Afficher le cumul à chaque occurence


Sujet :

Oracle

  1. #1
    Membre régulier

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Points : 81
    Points
    81
    Par défaut [Sql]Afficher le cumul à chaque occurence
    Bonjour

    j'ai une table de ce genre :

    ID LIBELLE DEBIT CODE
    1 CSO123 152.5 XXX
    2 CSO123 485 WWA
    3 CSO124 15.5 AZE
    4 CSO124 489 AREC
    5 CSO125 500 AREC

    Je voudrais ajouter le cumul du DEBIT en face de chaque ligne dont le libellé et meme :

    ID LIBELLE DEBIT CODE CUMUL
    1 CSO123 152.5 XXX 637.5
    2 CSO123 485 WWA 637.5
    3 CSO124 15.5 AZE 504.5
    4 CSO124 489 AREC 504.5
    5 CSO125 500 AREC 0

    Ca me semble pas insurmontable mais en réalité ma table est bien plus compliqué, alors si qqn peut me mettre sur la bonne piste.

    Merci

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Essayez avec une fonction analytique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id, libelle, debit, code, SUM(debit) OVER(PARTITION BY libelle) FROM t;

  3. #3
    Membre régulier

    Profil pro
    Laveur
    Inscrit en
    Avril 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Laveur

    Informations forums :
    Inscription : Avril 2004
    Messages : 142
    Points : 81
    Points
    81
    Par défaut
    Merci de t'etre penché sur la question
    je vais essayer mais pourrait tu me détailler ce que fait cette fonction et appartir de quelle version d'Oracle fonctionne t elle ?
    A défaut je veux bien un tuto

    Bon en fait j'ai arreté de faire le noob et j'ai trouvé ça :

    http://lalystar.developpez.com/fonctionsAnalytiques/


    Par contre, je voudrais qu'il ne fasse pas de cumul quand il n'y a qu'une seul référence, est ce que c'est possible de signaler ça en analytique ? (en rouge sur le post)

    Merci encore

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Je crois qu'on est obligé de faire le calcul pour toutes les lignes sélectionnées par la clause WHERE (s'il y en a une) et qu'il faut filtrer ensuite les résultats qu'on ne veut pas avec des vues en lignes (inline views). Je n'ai pas trouvé 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
    69
    70
    71
    72
    73
    SQL>
    SQL> drop table td;
     
    Table dropped.
     
    SQL>
    SQL> create table td (
      2   id number,
      3   libelle varchar2(6),
      4   debit number(8,2),
      5   code varchar2(4)
      6  );
     
    Table created.
     
    SQL>
    SQL> insert into td values (1, 'CSO123', 152.5, 'XXX');
     
    1 row created.
     
    SQL> insert into td values (2, 'CSO123', 485, 'WWA');
     
    1 row created.
     
    SQL> insert into td values (3, 'CSO124', 15.5, 'AZE');
     
    1 row created.
     
    SQL> insert into td values (4, 'CSO124', 489, 'AREC');
     
    1 row created.
     
    SQL> insert into td values (5, 'CSO125', 500, 'AREC');
     
    1 row created.
     
    SQL> commit;
     
    Commit complete.
     
    SQL>
    SQL> select id, libelle, debit, code,
      2         sum(debit) over (partition by libelle) sum_debit,
      3         row_number() over (partition by libelle order by id) rn
      4         from td;
     
            ID LIBELL      DEBIT CODE  SUM_DEBIT         RN
    ---------- ------ ---------- ---- ---------- ----------
             1 CSO123      152.5 XXX       637.5          1
             2 CSO123        485 WWA       637.5          2
             3 CSO124       15.5 AZE       504.5          1
             4 CSO124        489 AREC      504.5          2
             5 CSO125        500 AREC        500          1
     
    SQL>
    SQL> select id, libelle, debit, sum_debit, code
      2  from ( select id, libelle, debit, sum_debit, code,
      3         min(rn) over (partition by libelle) min_rn,
      4         max(rn) over (partition by libelle) max_rn
      5            from ( select id, libelle, debit, code,
      6                   sum(debit) over (partition by libelle) sum_debit,
      7                   row_number() over (partition by libelle order by id) rn
      8                   from td)
      9  ) where min_rn <> max_rn;
     
            ID LIBELL      DEBIT  SUM_DEBIT CODE
    ---------- ------ ---------- ---------- ----
             1 CSO123      152.5      637.5 XXX
             2 CSO123        485      637.5 WWA
             3 CSO124       15.5      504.5 AZE
             4 CSO124        489      504.5 AREC
     
    SQL>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL : Afficher les colonnes en ligne, et vice versa
    Par paflolo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/03/2009, 10h16
  2. [SQL] Afficher du HTML extrait d'une BD
    Par Linaa dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/04/2006, 12h13
  3. [PL/SQL] afficher le contenu dsql%found ?
    Par sali dans le forum Oracle
    Réponses: 2
    Dernier message: 11/02/2006, 04h46
  4. Afficher un cumul ou une somme dans un état
    Par Alex063 dans le forum Access
    Réponses: 4
    Dernier message: 07/02/2006, 16h37
  5. [sql] afficher deux champs de deux tables sans jointure
    Par Hell dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/06/2005, 13h38

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