Concatene columnas de varias tablas en una sola fila sin duplicados.
Necesito concatenar dos columnas de tablas diferentes, delimitadas con “;”, en una fila sin duplicados.
Tabla 1:
Nombre
John;Sue
Tabla 2:
Nombre
Mary;John
Salida deseada:
Nombres
John;Sue;Mary
Intenté con :
select listagg(a.Name, ';') within group (order by a.Name) as Names
from Table1 a
join Table2 b on a.id = b.id;
pero obtengo el error “ORA-01489: resultado de concatenación de cadenas es demasiado largo”.
¿Cómo puedo hacer esto adecuadamente en Oracle?
davy.ai
Para evitar el error ORA-01489, puede utilizar la palabra clave DISTINCT en la función listagg para eliminar duplicados antes de concatenar las cadenas. Aquí hay una consulta de ejemplo que debería funcionar para su caso:
Esta consulta combina primero los nombres de ambas tablas utilizando el operador UNION, que elimina duplicados por defecto. Después, la función listagg concatena los nombres distintos en una sola cadena, con puntos y comas como delimitadores.
Tenga en cuenta que todavía puede encontrarse con el error ORA-01489 si la cadena concatenada supera la longitud máxima permitida en Oracle. En ese caso, puede aumentar la longitud máxima (por ejemplo, mediante la configuración del parámetro MAX_STRING_SIZE en EXTENDED) o particionar la función listagg en múltiples cadenas más pequeñas utilizando la cláusula OVER.