Guía completa para convertir datos de filas en columnas usando PIVOT en SQL

En este artículo, explicaremos detalladamente cómo convertir datos de filas en columnas utilizando la función PIVOT de SQL. PIVOT es una herramienta muy útil para organizar los datos de manera que sean más fáciles de visualizar en la gestión y el análisis de bases de datos. Explicaremos el concepto básico de PIVOT y proporcionaremos ejemplos prácticos paso a paso.

Índice

Concepto básico de PIVOT

PIVOT es una función de transformación de datos en SQL que se utiliza para convertir datos de filas en datos de columnas. Por ejemplo, si los datos de ventas se almacenan como filas para cada mes, puedes mostrarlos como columnas que representan las ventas de cada mes. Al usar PIVOT, se facilita la visualización y el análisis de datos, lo que resulta útil para la inteligencia de negocios.

Ventajas de usar PIVOT

Las ventajas de usar PIVOT son las siguientes:

Mejora en la visualización de datos

Convertir datos de filas en datos de columnas hace que los datos sean más fáciles de comprender de manera intuitiva. Esto es especialmente útil en conjuntos de datos grandes, donde se pueden transformar en un formato más fácil de interpretar visualmente.

Mejora en la eficiencia del análisis

Al organizar los datos con PIVOT, se puede extraer la información necesaria de manera rápida, mejorando la eficiencia de las tareas de análisis.

Simplificación en la creación de informes

PIVOT simplifica la creación de informes complejos. Al consolidar múltiples datos de filas en una sola columna, facilita la comprensión del informe y mejora la calidad de la presentación.

Sintaxis básica de PIVOT

La sintaxis básica en SQL para usar PIVOT es la siguiente:

SELECT 
    [Columna fija],
    [Columna creada por PIVOT1],
    [Columna creada por PIVOT2],
    ...
FROM 
    (SELECT [Columna1], [Columna2], [Columna de agregación]
     FROM [Tabla de datos original]) AS SourceTable
PIVOT
(
    SUM([Columna de agregación])
    FOR [Columna2] IN ([Columna creada por PIVOT1], [Columna creada por PIVOT2], ...)
) AS PivotTable;

Explicación de la sintaxis básica de PIVOT

  • Columna fija: Es la columna que permanece después de la transformación con PIVOT.
  • Columna creada por PIVOT: Es la parte donde los datos de filas se convierten en datos de columnas.
  • Tabla de datos original: Es la tabla que contiene los datos originales para la operación de PIVOT.
  • Columna de agregación: Es la columna sobre la cual se realiza la operación de agregación (por ejemplo, el monto de ventas).
  • Función SUM: Es la función que define la operación de agregación. También se pueden usar otras funciones como COUNT, AVG, MAX, MIN, etc.

Ejemplo práctico: PIVOT de datos de ventas

A continuación, se muestra un ejemplo práctico de PIVOT usando datos de ventas. Supongamos que la siguiente tabla es el conjunto de datos original.

| Año  | Mes | Ventas |
|------|-----|--------|
| 2023 |  1  |  1000  |
| 2023 |  2  |  1500  |
| 2023 |  3  |  1200  |
| 2023 |  4  |  1700  |
| 2023 |  1  |  1100  |
| 2023 |  2  |  1400  |
| 2023 |  3  |  1300  |
| 2023 |  4  |  1600  |

El siguiente es el SQL que convierte estos datos para mostrar las ventas por cada mes en columnas.

SELECT 
    Año,
    [1] AS 'Enero',
    [2] AS 'Febrero',
    [3] AS 'Marzo',
    [4] AS 'Abril'
FROM 
    (SELECT Año, Mes, Ventas FROM Datos_de_ventas) AS SourceTable
PIVOT
(
    SUM(Ventas)
    FOR Mes IN ([1], [2], [3], [4])
) AS PivotTable;

Al ejecutar esta consulta, se obtiene el siguiente resultado:

| Año  | Enero | Febrero | Marzo | Abril |
|------|-------|---------|-------|-------|
| 2023 |  2100 |   2900  |  2500 |  3300 |

Explicación de la consulta

  • SELECT Año, Mes, Ventas FROM Datos_de_ventas extrae los datos originales.
  • SUM(Ventas) FOR Mes IN ([1], [2], [3], [4]) suma las ventas de cada mes y las convierte en columnas.

Así, puedes convertir los datos de ventas en columnas mensuales.

Ejemplos avanzados de PIVOT

PIVOT no solo es útil para agregaciones básicas, sino que también se puede aplicar en análisis de datos más complejos. A continuación se presentan algunos ejemplos avanzados.

Tendencia de ventas por año

Usando datos de ventas durante varios años, puedes mostrar la tendencia mensual de ventas por año utilizando PIVOT.

SELECT 
    Año,
    [1] AS 'Enero',
    [2] AS 'Febrero',
    [3] AS 'Marzo',
    [4] AS 'Abril',
    [5] AS 'Mayo',
    [6] AS 'Junio',
    [7] AS 'Julio',
    [8] AS 'Agosto',
    [9] AS 'Septiembre',
    [10] AS 'Octubre',
    [11] AS 'Noviembre',
    [12] AS 'Diciembre'
FROM 
    (SELECT Año, Mes, Ventas FROM Datos_de_ventas) AS SourceTable
PIVOT
(
    SUM(Ventas)
    FOR Mes IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable;

Esta consulta muestra las ventas de cada mes como columnas, facilitando la visualización de la tendencia de ventas anual.

Agregación mensual de ventas por categoría

Usa PIVOT para agregar las ventas mensuales por categoría y mostrar las ventas mensuales de cada categoría.

SELECT 
    Categoría,
    [1] AS 'Enero',
    [2] AS 'Febrero',
    [3] AS 'Marzo',
    [4] AS 'Abril',
    [5] AS 'Mayo',
    [6] AS 'Junio',
    [7] AS 'Julio',
    [8] AS 'Agosto',
    [9] AS 'Septiembre',
    [10] AS 'Octubre',
    [11] AS 'Noviembre',
    [12] AS 'Diciembre'
FROM 
    (SELECT Categoría, Mes, Ventas FROM Datos_de_ventas) AS SourceTable
PIVOT
(
    SUM(Ventas)
    FOR Mes IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable;

Esta consulta muestra las ventas mensuales de cada categoría en columnas, permitiendo analizar el rendimiento de ventas por categoría.

Diferencias entre PIVOT y UNPIVOT

PIVOT y UNPIVOT son dos funciones importantes de transformación de datos en SQL, pero se usan para propósitos diferentes.

Rol de PIVOT

PIVOT se utiliza para convertir datos de filas en datos de columnas. Esto permite mostrar valores de un campo específico como columnas y visualizar los resultados agregados de los datos.

Ejemplo de uso de PIVOT

Se presentó un ejemplo anterior en el que se agregaron las ventas mensuales y se mostraron como columnas. Esto permite una comprensión más intuitiva de los datos.

Rol de UNPIVOT

UNPIVOT se utiliza para convertir datos de columnas en datos de filas. Esto permite consolidar datos de varias columnas en una sola columna.

Ejemplo de uso de UNPIVOT

Supongamos que tenemos la siguiente tabla:

| Año  | Enero | Febrero | Marzo | Abril |
|------|-------|---------|-------|-------|
| 2023 |  2100 |   2900  |  2500 |  3300 |

La consulta UNPIVOT que convierte estos datos en datos de filas por mes es la siguiente:

SELECT 
    Año,
    Mes,
    Ventas
FROM 
    (SELECT Año, [Enero], [Febrero], [Marzo], [Abril] FROM Datos_de_ventas) AS PivotTable
UNPIVOT
(
    Ventas FOR Mes IN ([Enero], [Febrero], [Marzo], [Abril])
) AS UnpivotTable;

Esta consulta produce el siguiente resultado:

| Año  | Mes   | Ventas |
|------|-------|--------|
| 2023 | Enero |  2100  |
| 2023 | Febrero |  2900  |
| 2023 | Marzo  |  2500  |
| 2023 | Abril  |  3300  |

Cuándo usar PIVOT y UNPIVOT

  • PIVOT: Se utiliza cuando se desea convertir datos de filas en datos de columnas. Es útil para la visualización de datos y la creación de informes.
  • UNPIVOT: Se utiliza cuando se desea convertir datos de columnas en datos de filas. Es útil para la normalización y reestructuración de datos.

Conclusión

En este artículo, hemos explicado detalladamente cómo convertir datos de filas en columnas utilizando la función PIVOT de SQL. PIVOT es una herramienta poderosa que mejora la visualización de datos, aumenta la eficiencia del análisis y simplifica la creación de informes. También discutimos las diferencias entre PIVOT y UNPIVOT y cómo usarlos.

Dominar el uso de PIVOT puede ampliar tus capacidades de análisis de datos y permitirte trabajar con los datos de manera más intuitiva. Aplica PIVOT a tus datos reales y experimenta los beneficios que puede ofrecer.

Índice