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.