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 :

[9i] Aggrégat trié par date


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut [9i] Aggrégat trié par date
    Bonjour à tous,

    soit une table T comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ------------------------------------------------------
    SOCIETE           VALEUR                DATE
    ------------------------------------------------------
    X                       12                    22/10/2005
    X                       17                    12/01/2004
    X                       22                     25/07/2007
    Y                       12                    22/10/2005
    Y                      17                      12/03/2006
    Y                       22                     20/07/2007
    Y                       22                     05/07/2007
    ...
    et une fonction d'agrégat du style: http://pages.infinit.net/orautils/pages/stragg.htm (Fonction qui concatène les valeurs d'une colonne d'agrégat)

    Je voudrais obtenir pour chaque SOCIETE une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    X  [Liste des VALEURs triées par date]  [Liste des DATEs triées]
    Y  [Liste des VALEURs triées par date]  [Liste des DATEs triées]
    soit pour l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ------------------------------------------------------
    SOCIETE      VALEURS                DATES
    ------------------------------------------------------
    X            17;12;22       12/01/2004;22/10/2005;25/07/2007
     
    Y         12;17;22;22      22/10/2005;12/03/2006;05/07/2007;20/07/2007
     
     
    ...
    en gros - en omettant le tri - la requête serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select societe, stragg(valeur),stragg(TO_CHAR(date))
    from T
    group by societe
    N.B: En réalité la fonction d'agrégat que j'utilise à la place de stragg créé un VARRAY au lieu d'une concaténation.

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    LA VERSION !!!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Version 9i désolé...

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    ok, bon, soit tu écris ta propre fonction qui trie, ou alors tu te la tentes à la sauce XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create table t as select 'X' societe,12 valeur,
      to_date('22/10/2005','DD/MM/YYYY') d from dual union all
    select 'X',17,to_date('12/01/2004','DD/MM/YYYY') from dual union all
    select 'X',22,to_date('25/07/2007','DD/MM/YYYY') from dual union all
    select 'Y',12,to_date('22/10/2005','DD/MM/YYYY') from dual union all
    select 'Y',17,to_date('12/03/2006','DD/MM/YYYY') from dual union all
    select 'Y',22,to_date('20/07/2007','DD/MM/YYYY') from dual union all
    select 'Y',22,to_date('05/07/2007','DD/MM/YYYY') from dual;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select societe,
      replace(replace(replace(replace(
        xmlagg(sys_xmlgen(to_char(valeur)) order by valeur),
        chr(10)),
        '</ROW><ROW>',','),'</ROW>'),'<ROW>') valeur,
      replace(replace(replace(replace(
        xmlagg(sys_xmlgen(to_char(d,'DD/MM/YYYY')) order by d),
        chr(10)),
        '</ROW><ROW>',','),'</ROW>'),'<ROW>') d
    from t
    group by societe;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    S VALEUR          D
    - --------------- ---------------------------------------------
    X 12,17,22        12/01/2004,22/10/2005,25/07/2007
    Y 12,17,22,22     22/10/2005,12/03/2006,05/07/2007,20/07/2007

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    MERCI,

    alors c'est ce que je voulais mais plutôt ORDER BY d pour les dates et les valeurs. Donc nickel.

    Est-ce que je peux définir ma propre fonction d'aggrégat qui - comme xmlagg - accepte une clause "order by" dans son argument ? (désolé de mon ignorance)


    Pour ma propre "fonction qui trie", doit-elle prendre des objets (date,valeur) en paramètre ?

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par jlinho2 Voir le message
    Est-ce que je peux définir ma propre fonction d'aggrégat qui - comme xmlagg - accepte une clause "order by" dans son argument ? (désolé de mon ignorance)
    hélas non

    [Edit]Mnitu a écrit :[/Edit]
    ...sans xml...
    Je veux bien que d'utiliser XML pour retourner une chaine a partir d'une chaine c'est un peu barbare, mais alors employer une hiérarchie, c'est de l'hérésie

    Bon week-end prolongé

  7. #7
    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
    En suivant StraggQueries et sans XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select societe, Max(Ltrim(sys_connect_by_path(valeur,','),',')) valeur, 
           Max(Ltrim(sys_connect_by_path(d,','),',')) d
    From (
      Select societe, valeur,d , row_number() over (partition by societe order by d) rn
      From t_mni
      )
    Start with rn = 1
    Connect By societe = prior societe And prior rn = rn - 1
    Group by societe

Discussions similaires

  1. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  2. Optimisation d'un tri par date
    Par padawa dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/05/2006, 15h48
  3. requete : tri par date + groupement
    Par cbe dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/01/2006, 19h30
  4. tri par date
    Par Digiduck dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/06/2005, 21h51
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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