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 :

ORACLE 10 : Multiple tuples sur une ligne ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Par défaut ORACLE 10 : Multiple tuples sur une ligne ?
    Bonjour,

    avec 3 tables dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UserUnit
    userid
    unitid
    et sachant qu'un utilisateur est lié a 1 ou plusieurs unités.
    Je voudrais afficher la liste de tous les utilisateurs ainsi que la (ou les) unité(s) auxquels ils appartiennent.


    Faciiiiiiiiiiile me direz vous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select us.nom, un.libelle
    from users us, unit un, userunit uu
    where us.userid=uu.userid
    and    uu.unitid=un.unitid
    Cela va m'afficher cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    User1 Libelle1
    User1 Libelle2
    User2 Libelle4
    User3 Libelle1
    User3 Libelle2
    User3 Libelle3
    ...
    mais je voudrais quelque chose qui s'affiche sur une seule ligne dans ce genre-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    User1 Libelle1 Libelle2
    User2 Libelle4
    User3 Libelle1 Libelle2 Libelle3
    ...
    Pas de problème via un script pl-sql, mais existe-t-il un moyen de faire cela avec un simple select sql ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ce que tu cherches à faire est de la cosmétique et n'est pas le boulot du SGBDR mais celui du programme qui interroge la BDD.
    Ceci dit, peut-être existe t-il chez Oracle l'équivalent du GROUP_CONCAT de MySQL pour le faire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Par défaut
    Merci Phil, je suis assez d'accord avec toi, c'est de la cosmétique pure et dure

    Je vais chercher dans la direction que tu proposes !

  4. #4
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    C'est vrai, c'est de la cosmétique. Mais bon des fois...

    j'ai parlé de ça ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT table1."Nom", table1."Prenom"
      rtrim(REPLACE(REPLACE(XMLAGG(XMLElement("x", table1."Num-tel") ORDER BY table1."Num-tel" ASC),'<x>', ''),'</x>', '-'),'-') "Tel List"  
        FROM table1
    GROUP BY table1."Nom", table1."Prenom"

  5. #5
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT us.nom, 
        WM_CONCAT(un.libelle)
    FROM users us, unit un, userunit uu
    WHERE us.userid=uu.userid
    AND    uu.unitid=un.unitid
    group by us.nom
    EDIT: ah oui, celle de nuke_y fonctionne aussi

    en oracle 11, tu aurais LISTAGG / WITHIN GROUP qui est top, en 10, faut se débrouiller autrement.

    A savoir que depuis oracle 9, tu peux aussi directement fabriquer tes propres fonctions d'aggrégats.

    Voir l'article très interressant qui répertorie toutes les possibilité pour résoudre ce pb:

    http://www.oracle-base.com/articles/...Techniques.php

  6. #6
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Ouh c'est intéressant ça remi4444. J'avais abandonné WM_CONCAT parce que je ne pouvais pas trier, mais si je peux faire mes propres fonctions...

  7. #7
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    @nuke_y

    Ca dépend dans quelle version tu es. Ils ont mis 11 versions à s'en rendre compte mais enfin oracle a fait une vrai fonction de concaténation avec LISTAGG / WITHIN GROUP ou tu peux justement trier.

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

Discussions similaires

  1. Focus sur une ligne d'une liste à sélection multiple
    Par sardaucar dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/05/2014, 10h55
  2. div et innerHTML : tout sur une ligne?
    Par LineLe dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/04/2005, 11h15
  3. nombres d'images sur une lign automatique
    Par AnKhCHFR dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/03/2005, 11h52
  4. Lien sur une ligne de tableau
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2005, 11h36
  5. pointer sur une ligne d'un TStringGrid
    Par jeannot27 dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/10/2004, 10h56

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