varios varias unir una sola registros group_concat filas español ejemplos concatenar columna agrupar sql oracle oracle10g

registros - unir varias filas en una sola sql



SQL-Múltiples valores separados por comas cuando se utiliza GROUP BY (4)

Esta pregunta ya tiene una respuesta aquí:

Tengo datos que se parecen

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

Me gustaría escribir una consulta que haga que los datos se vean así:

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

Usar Oracle 10g si ayuda. Vi algo que funcionaría usando MYSQL, pero necesito un SQL simple o un equivalente de ORACLE. También he visto ejemplos de procs almacenados que podrían hacerse, sin embargo, no puedo usar un proceso almacenado con el producto que estoy usando.

Así es como funcionaba en MySQL si lo estuviera usando

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

Gracias.


Creo que LISTAGG es el mejor grupo agregado por función para usar en esta situación:

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


Gracias Nigel,

Mi SQL no es tan elegante como podría ser, pero necesitaba una solución que solo requiriera SQL, no PLSQL o TSQL, así que terminó luciendo así:

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

Todavía no estoy exactamente seguro de lo que hacen las funciones XML exactamente, pero investigaré cuando sea necesario.


Este enlace se refiere a una serie de ejemplos de diferentes formas de hacer esto en Oracle. Vea si hay algo allí que tenga permisos en su base de datos para hacer.


La función de usuario de Oracle "wm_concat" funciona de la misma manera que LISTAGG, excepto que no puede especificar un delimitador '','' de forma predeterminada o un orden de clasificación. Sin embargo, es compatible con 10g.