Concatenación de registros

En este sencillo post les mostraré cómo se pueden concatenar registros como si fueran columnas, sin crear un programa, con una simple consulta.

Primero hay que ver qué información se va a concatenar. En este caso, muestro los departamentos cuya clave es menor igual a 100 del esquema HR de pruebas:

SQL> select *
  2  from   departments
  3* where  department_id <= 100;

DEPARTMENT_ID DEPARTMENT_NAME                MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
           10 Administration                        200        1700
           20 Marketing                             201        1800
           30 Purchasing                            114        1700
           40 Human Resources                       203        2400
           50 Shipping                              121        1500
           60 IT                                    103        1400
           70 Public Relations                      204        2700
           80 Sales                                 145        2500
           90 Executive                             100        1700
          100 Finance                               108        1700

10 rows selected.

Para realizar la concatenación de registros, se puede usar a partir de la versión 11gR2 la función analítica listagg (list aggregate) para realizar esta tarea. El formato para realizar nuestra concatenación, será como sigue:

listagg (nombre_columna, separador) withing group (order by nombre_columna)

donde el separador será el o los caracteres que se usen para separar los valores de los distintos registros.

Muy bien, entonces se desea generar un texto en el cual, se integren los nombres de los departamentos cuya clave sea menor o igual a 40 y ordenados por dicha clave, en el siguiente ejemplo se puede ver cómo se usa la función listagg:

SQL> select listagg (department_name, ' ') within group (order by department_id) concatenated_value
  2  from   departments
  3* where  department_id <= 40;

CONCATENATED_VALUE
----------------------------------------------------------------------------------------------
Administration Marketing Purchasing Human Resources

1 row selected.

Con esto, ya se ven los valores de los distintos registros concatenados, en el orden en que deseamos.

Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.

Anuncios

3 Responses to Concatenación de registros

  1. Cristian says:

    Se pueden hacer agrupaciones con rangos??? Es decir ej. DEPARTMENT_ID 40????? Sin usar un union??

  2. Cristian says:

    El comentario anterior era: ej. DEPARTMENT_ID < = 40 y DEPARTMENT_ID &gt 40 Sin usar UNION

  3. Orlando Olguín Olvera says:

    Hola Cristian.

    ¿Te refieres a que hagas un select con una de las condiciones, DEPARTMENT_ID <= 40 y al mismo tiempo hacer un select con otra condición, DEPARTMENT_:ID algo 40?

    Pienso que una forma alterna sería algo así como:
    select campos
    from tabla
    where id in (select campo from tabla where department_id <= 40)
    or id in (select campo from tabla where department_id algo 40);

    Así, tienes la información de la tabla principal de acuerdo a las dos condiciones sin un UNION.

    Orlando.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: