sql server

Convertir filas en columnas y columnas en filas en SQL Server

Número de visualizaciones
23/06/2015

En este post quiero hablar de los operadores relacionales PIVOT y UNPIVOT de SQL Server los cuales en una consulta SQL permiten intercambiar los resultados de filas por columnas (referencias cruzadas).

Aunque en este post nos centramos en SQL Server estos operadores están disponibles en otros gestores de Base de Datos como Oracle.

 

PIVOT

A través de este operador de SQL Server, podemos transformar las filas devueltas mediante una consulta en columnas de valor único.

operador pivot

La sintaxis del este operador sería:

sintaxis pivot

Veamos un ejemplo de uso. Supongamos que disponemos de los siguientes datos:

datos pivot

Al tomar estos datos como entrada, aplicando el operador PIVOT:

datos pivot

Los resultados obtenidos serían:

resultados obtenidos en pivotComo podemos observar, se hace una agrupación por años, aplicando la función de agrupación SUM y los valores únicos de los años se emplean en la salida como columnas.

Si pidiésemos años para los que no existen valores, en las celdas correspondientes se devolvería NULL.

sentencia bis PIVOT

 

UNPIVOT

Para realizar la operación inversa, es decir transformar columnas en filas, usamos el operador de SQL Server llamado UNPIVOT.

Para ver el funcionamiento de UNPIVOT, supongamos que usamos como datos de entrada la siguiente tabla:

tabla de datos unpivot

Si aplicamos el operador UNPIVOT a través de la sentencia:

unpivot sentencia

Los resultados obtenidos serían:

columna unpivot

Que como se puede observar, muestra los datos intercambiando las columnas y cruzando las columnas con las filas originales para obtener la tabla completa.

Por tanto UNPIVOT es el operador opuesto a PIVOT, a excepción que PIVOT ejecuta una función de agregación, mientras transforma los valores de la fila en valores de columna, con lo cual podría fusionar lo valores de múltiples filas en un valor de una sola columna de salida. Por tanto, aplicando a unos datos el operador PIVOT y posteriormente el UNPIVOT, no obtendríamos los datos originales.

En cualquier caso estos dos operadores de SQL Server, como he mostrado a lo largo del post, son muy fáciles de usar y con una sola consulta nos pueden dar mucha información.

1+
Categorizado en: Desarrollo de Aplicaciones

19 Comentarios

  1. Jhon dice:

    el la linea FOR[Columna] IN ([A],[B],…) obligatoriamente deben ser del mismo tipo cierto, osea no puede ver columnas varchar y int.?

    0
  2. Rocio dice:

    En el ejemplo donde se realiza el pivot que agrupa los años y suma lo de cada año

    ¿como le puedo hacer para sumar todos los años de cada país?

    0
    • Víctor Manuel Acosta Víctor Manuel Acosta dice:

      Para eso con utilizar SQL estándar sería suficiente:
      SELECT country,
      SUM (SalesAmount)
      FROM [dbo].[PivotExample]
      GROUP BY country;

      2+
  3. Luis Enrique dice:

    Y SI NO Quiero Agregacion como puedo usar Pivot, CUANDO TENGO PROFESIONES en dos filas

    2+
  4. xzasdaasd dice:

    hola onde agrego los WHERE ?por ejemplo si quiero filtrar 

    0
  5. claudia lc dice:

    Buen día para crear un pivot dinámico (no tengo la información del campo constante)  o algún otro método

    0
Ver más comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre MasterClass de INESEM. Una plataforma en la que profesionales enseñan en abierto

Profesionales enseñando en abierto