jueves, 25 de octubre de 2012

SQL(Oracle) - Devolver varias filas concatenadas en una columna


El siguiente query nos sirve para cuando tenemos varias filas pero solo queres una fila y que nos regrese el resultado de todas las filas concatendas en una columna, es decir si tenemos los siguientes datos:

Pais Ciudad
1 Ciudad 1
1 Ciudad 2
1 Ciudad 3
2 Ciudad 4
2 Ciudad 5
2 Ciudad 6

Al ejecutar el siguiente Query:

select   Pais,   rtrim (xmlagg (xmlelement (e,ciudad || ',')).extract ('//text()'), ',')  Ciudades
from  tablaPais
group by Pais

nos da lo siguiente:


Pais Ciudades
1 Ciudad 1,Ciudad 2,Ciudad3
2 Ciudad 3,Ciudad 4,Ciudad 5

como esta agrupado por Pais nos devuelve dos filas una con el pais 1 concatenando en la columna Ciudades el contenido de todas las ciudades del pais 1, de igual forma pasa con el pais 2.


17 comentarios:

  1. Excelente ejemplo, muchas gracias por tu aporte

    ResponderEliminar
  2. Una pregunta, en caso contrario, como seria si yo tuviera por ejemplo:

    FILA 1: 5,Ciudad6,Ciuda12,Ciudad3
    FILA 2: 5,Ciudad3,Ciudad10,Ciudades125,ciudad

    Para que me retorne lo que esta entre cada coma, pero tomando los caracteres que le indica el o los numeros antes del asterisco (Pueden ser uno o dos digitos)

    Resultado:
    Ciudad,ciuda,Ci
    Ciudad,Ciu,Ciudades12,ciudad

    Gracias!!

    ResponderEliminar
  3. Muchas gracias, funciona perfecto.

    ResponderEliminar
  4. MUCHAS GRACIAS EXCELENTE ME SALIO PERFECTO TENIA DIAS DE ESTAR BUSCANDO

    ResponderEliminar
  5. la mejor respuesta, en internet encontré también otras soluciones, pero esta es la más optima y más rápida (y)

    ResponderEliminar
  6. Muy buen aporte, me ayudó mucho, muchas gracias amigo!!!!

    ResponderEliminar
  7. Muy util tu aporte, gracias por compartir tus conocimientos!!

    ResponderEliminar