Domanda

    

Questa domanda ha già una risposta qui:

         

Ho dei dati simili a

CUSTOMER,  CUSTOMER_ID, PRODUCT
ABC INC    1            XYX
ABC INC    1            ZZZ
DEF CO     2            XYX
DEF CO     2            ZZZ
DEF CO     2            WWW
GHI LLC    3            ZYX

Vorrei scrivere una query per rendere i dati così:

CUSTOMER, CUSTOMER_ID, PRODUCTS
ABC INC   1            XYX, ZZZ
DEF CO    2            XYX, ZZZ, WWW
GHI LLC   3            ZYX

Utilizzando Oracle 10g se aiuta. Ho visto qualcosa che avrebbe funzionato usando MYSQL, ma ho bisogno di un semplice equivalente SQL o ORACLE. Ho anche visto esempi di proc memorizzati che potrebbero essere fatti, tuttavia, non posso usare un proc memorizzato con il prodotto che sto usando.

Ecco come funzionerebbe in MySQL se lo stessi usando

SELECT CUSTOMER, 
       CUSTOMER_ID, 
       GROUP_CONCAT( PRODUCT ) 
FROM MAGIC_TABLE 
GROUP BY CUSTOMER, CUSTOMER_ID

Grazie.

È stato utile?

Soluzione

Questo link fa riferimento a una serie di esempi di modi diversi per fare questo su Oracle. Vedi se c'è qualcosa che hai i permessi sul tuo database da fare.

Altri suggerimenti

Penso che LISTAGG sia il miglior gruppo aggregato per funzione da utilizzare in questa situazione:

  SELECT CUSTOMER, CUSTOMER_ID,
         LISTAGG(PRODUCT, ', ') WITHIN GROUP (ORDER BY PRODUCT)
    FROM SOME_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
ORDER BY 1, 2

La funzione utente dell'oracolo 'wm_concat' funziona allo stesso modo di LISTAGG tranne per il fatto che non è possibile specificare un delimitatore ',' per impostazione predefinita o un ordinamento. È tuttavia compatibile con 10g.

Grazie Nigel,

Il mio SQL non è elegante come potrebbe essere, ma avevo bisogno di una soluzione che richiedesse solo SQL, non PLSQL o TSQL, quindi alla fine sembrava così:

SELECT   CUSTOMER, CUSTOMER_ID, COUNT(PRODUCT) PROD_COUNT, 
         RTRIM( 
            XMLAGG( XMLELEMENT (C, PRODUCT || ',') ORDER BY PRODUCT
).EXTRACT ('//text()'), ',' 
         ) AS PRODUCTS FROM     (
         SELECT   DISTINCT CUSTOMER, CUSTOMER_ID, PRODUCT
         FROM     MAGIC_TABLE
         ) GROUP BY CUSTOMER, CUSTOMER_ID ORDER BY 1 , 2

Ancora non sono esattamente sicuro di cosa faccia esattamente la funzione XML, ma scavero quando arriverà la necessità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top