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 :

Grouper par id plus concaténation


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut Grouper par id plus concaténation
    Bonjour a tous,

    Oracle 10gR2

    Je voudrais savoir si c'est possible de regrouper des donner sur une seule ligne. voici l'exemple:

    soit la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
                pp.producto,
    			pp.grupo,
    			lower(gp.nombre) nombre,
    			pp.prioridad prioridad 
    FROM producto_prioridad_grupo pp
    NNER JOIN grupo_prioridad gp ON  pp.grupo=gp.grupo AND pp.producto='66639052'
    ORDER BY producto ;
    le resulta est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PRODUCTO GRUPO   NOMBRE                    PRIORIDAD                              
    66639052 32      orden_she_offers          1259                                   
    66639052 33      orden_she_offers_china    511                                    
    66639052 27      orden_she_outlet_china    1042                                   
    66639052 34      orden_she_outlet_usa      794                                    
    66639052 26      orden_touch_nuevo         32
    Je voudrais avec SQL pur ou PL/SQL arriver a ce resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PRODUCTO GRUPO  		 NOMBRE                    																				PRIORIDAD                              
    66639052 32,33,27,34,26  orden_she_offers,orden_she_offers_china,orden_she_outlet_china,orden_she_outlet_usa,orden_touch_nuevo	1259,511,1042,794,32
    Este possible?
    Si quelque'un a une idée ça serait genial, j'essaie de mon còté...
    D'avance merci

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut a tous,

    j'ai trouvé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select cast( multiSet( SELECT
                pp.producto,
    			pp.grupo,
    			lower(gp.nombre) nombre,
    			pp.prioridad prioridad 
    FROM producto_prioridad_grupo pp
    INNER JOIN grupo_prioridad gp ON  pp.grupo=gp.grupo AND pp.producto='66639052'
    ORDER BY producto ) as TStrings ) as LIST from dual;
    Mais j'ai l'ereur, invalid datatype sur TStrings ...

  3. #3
    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 10g vous pouvez utiliser la fonction collect à la place de multiset mais le resultat est une collone de type nested table et non pas une chaine des caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select e.department_id, 
           cast(collect(to_char(e.employee_id) order by e.employee_id) as sys.odcivarchar2list) tab_id,
           cast(collect(e.first_name order by e.employee_id) as sys.odcivarchar2list) tab_name
      from hr.employees e
    group by e.department_id
    /

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut,
    merci pour ta reponse, si je transpose ta requete avec la mienne, ça me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT     pp.producto,
            pp.grupo,
           cast(collect(to_char(pp.producto) ORDER BY pp.producto) AS sys.odcivarchar2list) pp_id,
           cast(collect(pp.grupo ORDER BY pp.producto) AS sys.odcivarchar2list) pp_grupo
    FROM producto_prioridad_grupo pp
    INNER JOIN grupo_prioridad gp ON  pp.grupo=gp.grupo
    AND pp.producto='66639052'
    group by pp.producto;
    Mais j'ai l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Error] Execution (34: 13): ORA-00932: tipos de dato inconsistentes: se esperaba - se ha obtenido -

    J'ai aussi vu cette option avec LISTAGG:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT LISTAGG(pp.producto,',') WITHIN GROUP( ORDER BY pp.producto)
    FROM producto_prioridad_grupo pp
    INNER JOIN grupo_prioridad gp ON  pp.grupo=gp.grupo
    AND pp.producto='66639052';
    Mais la j'ai aussi une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00923: palabra clave FROM no encontrada donde se esperaba

    Je vois pas...

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    mon dieu je crois que j'ai reussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct(pp.producto),WM_CONCAT(pp.grupo) as grupo, WM_CONCAT(gp.nombre) as nombre, WM_CONCAT(pp.prioridad) as prioridad
    FROM mngbd.producto_prioridad_grupo pp
    INNER JOIN mngbd.grupo_prioridad gp ON  pp.grupo=gp.grupo AND pp.producto='66639052'
    group by pp.producto
    ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PRODUCTO GRUPO                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            NOMBRE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PRIORIDAD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    66639052 32,33,27,26,34                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ORDEN_SHE_OFFERS,ORDEN_SHE_OFFERS_CHINA,ORDEN_TOUCH_NUEVO,ORDEN_SHE_OUTLET_USA,ORDEN_SHE_OUTLET_CHINA                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1259,511,794,32,1322
    Vous validez? cette fonction c'est d'oracle? elle est stable et supportée?
    Car c'est pour monter a PROD dans le futur.
    D'avance merci

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Ufff
    Bon j'ai trouvé ça:
    https://forums.oracle.com/forums/thr...hreadID=896465

    pas bon, je dois utiliser une fonction documentée pour le passer a PROD.
    Si quelqu'un connait une autre forme de faire pareil, je suis prenneur.

Discussions similaires

  1. grouper par la plus grande occurence d'un champ
    Par nimwak dans le forum Requêtes
    Réponses: 0
    Dernier message: 04/05/2009, 14h59
  2. grouper par trimestre
    Par lazzeroni dans le forum Oracle
    Réponses: 3
    Dernier message: 30/05/2006, 15h18
  3. Réponses: 2
    Dernier message: 13/04/2006, 16h09
  4. Debutant - Requête Grouper par Date
    Par ghan77 dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/12/2005, 17h07
  5. grouper par une partie d'attribut
    Par vplf dans le forum Langage SQL
    Réponses: 19
    Dernier message: 21/01/2005, 16h31

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