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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    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
    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
    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 confirmé

    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
    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
    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, 09h16
  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, 11h13
  3. [PL/SQL] afficher le contenu dsql%found ?
    Par sali dans le forum Oracle
    Réponses: 2
    Dernier message: 11/02/2006, 03h46
  4. Afficher un cumul ou une somme dans un état
    Par Alex063 dans le forum Access
    Réponses: 4
    Dernier message: 07/02/2006, 15h37
  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, 12h38

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