Tendencias:
sql server

Convertir filas en columnas y columnas en filas en SQL Server

23/06/2015
Número de visualizaciones

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.

+5
Categorizado en: Informática y TICS

No hay comentarios

  1. Diego dice:

    Dado que parece que no existen dos filas en la tabla original para el mismo país y año, ¿por qué usar SUM? ¿ no podemos usar simplemente PIVOT y dejar que el sistema reordene las filas? ¿Es obligatorio usar una función de agregación incluso si uso la sentencia PIVOT?

    Muchas gracias de antemano.

    0
    • Rafael Marín dice:

      Buenas tardes Diego.
      En SQL Server, la función PIVOT se utiliza para transformar filas en columnas, pero requiere una función de agregación, ya que necesita saber cómo combinar los valores de las filas correspondientes a una misma columna en la salida pivotada.

      Cuando realizas un PIVOT, estás especificando qué columna se usará para crear las nuevas columnas en la salida. Además, debes proporcionar una función de agregación para indicar cómo se deben combinar los valores de esas filas en las nuevas columnas. La función de agregación puede ser SUM, MAX, MIN, AVG, entre otras.

      Por ejemplo, si tienes varias filas para el mismo país y año y deseas combinar esas filas en una sola fila, necesitas una función de agregación para determinar cómo se calculará el valor resultante. Si no tienes duplicados y sabes que cada combinación de país y año es única, aún así debes especificar una función de agregación en el PIVOT.

      En resumen, aunque no haya duplicados en los datos originales, la función de agregación es necesaria cuando usas PIVOT en SQL Server para indicar cómo se deben combinar los valores de las filas correspondientes a una misma columna en la salida pivotada.

      0
  2. Agus dice:

    MIL GRACIAS

    Me ha sido muy útil esta página.

    0
  3. Elmo dice:

    Los ejemplos están algo «tontos», cómo voy a saber qué resultados poner luego del FOR? no puedo poner «quemados» valores en una consulta dinámica, a quién se le ocurre?

    +8
  4. Ysidro dice:

    Saludos hermanos ando investigando, como generar un valor mas alto de una serie de valores en una tabla con php

    0
  5. Maite dice:

    Es el mejor ejemplo que he encontrado! Mil gracias

    +1
Ver más comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada.

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

Descubre nuestro contenido más actualizado en TERRITORIO INESEM

PRÓXIMOS EVENTOS

Cómo usar el Big Data para la Creación de Contenido

Cómo usar el Big Data para la Creación de Contenido

Miguel Ángel García Rodríguez
1 hora
18/03/2024 17:00
La Importancia de la Marca a la Hora de Comunicarnos

La Importancia de la Marca a la Hora de Comunicarnos

Carlos Gutiérrez Horno
1 hora
25/03/2024 17:00
Universidades colaboradoras
La universidad Antonio de Nebrija es Universidad colaboradora con INESEM Business School La universidad a Distancia de Madrid es Universidad colaboradora con INESEM Business School