sql >> Base de Datos >  >> RDS >> Database

SQL Pivot:sepa cómo convertir filas en columnas

Las bases de datos relacionales almacenan enormes cantidades de datos en forma de tablas. Estas tablas pueden tener cualquier número de filas y columnas. Pero, ¿qué pasaría si tuviera que cambiar los datos de nivel de fila a datos de columna? Bueno, en este artículo sobre SQL Pivot, le mostraré cómo puede convertir filas en una columna en un servidor SQL.

Los siguientes temas se tratarán en este artículo:

  • ¿Qué es PIVOT en SQL?
  • Sintaxis
  • Ejemplo
  • Funcionamiento de la cláusula PIVOT
  • SQL UNPIVOT

¿Qué es PIVOT en SQL?

PIVOT se usa para rotar el valor de la tabla convirtiendo los valores únicos de una sola columna en múltiples columnas. Se utiliza para rotar las filas a valores de columna y ejecuta agregaciones cuando es necesario en los valores de columna restantes.

UNPIVOT, por otro lado, se usa para realizar las operaciones opuestas. Por lo tanto, se usa para convertir las columnas de una tabla específica en valores de columna.

Continuando con este artículo, comprendamos la sintaxis de SQL Pivot.

Sintaxis:

SELECT NonPivoted ColumnName,  
    [First Pivoted ColumnName] AS ColumnName,  
    [Second Pivoted ColumnName] AS ColumnName, 
    [Third Pivoted ColumnName] AS ColumnName,	
    ...  
    [Last Pivoted ColumnName] AS ColumnName  
FROM  
    (SELECT query which produces the data)   
    AS [alias for the initial query]  
PIVOT  
(  
    [AggregationFunction](ColumName)  
FOR   
[ColumnName of the column whose values will become column headers]   
    IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName],  [Third Pivoted ColumnName]
    ... [last pivoted column])  
) AS [alias for the Pivot Table];

Aquí, también puede usar la cláusula ORDER BY para clasificar los valores en orden ascendente o descendente. Ahora que sabe qué es PIVOT en SQL y su sintaxis básica, avancemos y veamos cómo usarlo.

Ejemplos

Para su mejor comprensión, consideraré la siguiente tabla para explicarle todos los ejemplos.

Tabla de proveedores:

ID de proveedor Días de fabricación Coste ID de cliente ID de compra
1 12 1230 11 P1
2 21 1543 22 P2
3 32 2345 11 P3
4 14 8765 22 P1
5 42 3452 33 P3
6 31 5431 33 P1
7 41 2342 11 P2
8 54 3654 22 P2
9 33 1234 11 P3
10 56 6832 33 P2

Escribamos una consulta simple para recuperar el costo promedio gastado por cada cliente.

SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer   
FROM Suppliers  
GROUP BY CustomerID;  

Salida:

ID de cliente Costepromediodelcliente
11 1787,75
22 4654
33 5238.33

Ahora, digamos que queremos pivotar la tabla anterior. Aquí, los valores de la columna CustomerID se convertirán en los encabezados de columna.


-- Create Pivot table with one row and three columns
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers,
[11], [22], [33]
FROM
(SELECT CustomerID, Cost
FROM Suppliers) AS SourceTable
PIVOT
(
AVG(Cost)
FOR CustomerID IN ([11], [22], [33])
) AS PivotTable;

Salida:

Coste_según_los_clientes 11 22 33
Coste medio del cliente 1787,75 4654 5238.33

Nota: Cuando usa funciones agregadas con PIVOT, los valores nulos no se consideran al calcular una agregación.

Bueno, ese fue un ejemplo básico, pero ahora entendamos cómo funcionaba la cláusula PIVOT.

Funcionamiento de la cláusula PIVOT

Como puede consultar arriba, para crear una TABLA PIVOTE, debe seguir los pasos a continuación:

  • Seleccionar columnas para pivotar
  • Luego, seleccione una tabla de origen.
  • Aplique el operador PIVOT y luego use las funciones agregadas.
  • Mencione valores pivote.

Seleccionar columnas para pivotar

Inicialmente, tenemos que especificar los campos que se incluirán en nuestros resultados. En nuestro ejemplo, consideré la columna AverageCostofCustomer en la tabla dinámica. Luego creamos otras tres columnas con los encabezados de columna 11, 22 y 33. Ejemplo-

SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]

Seleccionar tabla de origen

Luego, debe especificar la declaración SELECT que devolverá los datos de origen para la tabla dinámica. En nuestro ejemplo, devolvemos el CustomerID y el Costo de la tabla Proveedores.

(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable

Aplicar el operador PIVOT y luego usar las funciones agregadas

Luego, debe especificar la función agregada que se usará al crear la tabla dinámica. En nuestro ejemplo, he usado la función AVG para calcular el costo promedio.

PIVOT ( AVG(Cost)

Mencionar valores pivote

Finalmente, debe mencionar los valores que deben incluirse en la tabla dinámica resultante. Estos valores se utilizarán como encabezados de columna en la tabla dinámica.

FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;

Así es como funcionan los operadores PIVOT. Continuando con este artículo sobre SQL PIVOT, comprendamos cuán diferente es de SQL UNPIVOT.

SQL UNPIVOT

El operador SQL UNPIVOT se utiliza para realizar la operación contraria a la de PIVOT. Se utiliza para rotar los datos de la columna en datos de nivel de fila. La sintaxis de UNPIVOT es similar a la de PIVOT. La única diferencia es que debe usar la palabra clave SQL "UNPIVOT" .

Ejemplo:

Vamos a crear una tabla con las columnas ID de proveedor, AAA, BBB y CCC. Además, inserte algunos valores.

CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int);  
GO  
INSERT INTO sampletable VALUES (1,3,5,6);  
INSERT INTO sampletable VALUES (2,9,2,8);  
INSERT INTO sampletable VALUES (3,8,1,7);  
GO  

Salida:

ID de proveedor AAA BBB CCC
1 3 5 6
2 9 2 8
3 8 1 7

Ahora, digamos, queremos deshacer el pivote de la tabla. Para hacerlo, puede consultar el siguiente código:

SELECT SupplierID, Customers, Products
FROM
(SELECT SupplierD, AAA, BBB, CCC
FROM sampletable) p
UNPIVOT
(Products FOR Customers IN
(AAA, BBB, CCC)
)AS example;
GO
ID de proveedor Clientes Productos

1

AAA

3

1

BBB

5

1

CCC

6

2

AAA

9

2

BBB

2

2

CCC

8

3

AAA

8

3

BBB

1

3

CCC

7

Así es como puedes usar SQL PIVOT y UNPIVOT. Con esto, llegamos al final de este artículo. Espero que hayas entendido cómo usar SQL. Si desea obtener más información sobre MySQL y conocer esta base de datos relacional de código abierto, consulte nuestra Capacitación para la certificación de MySQL DBA que viene con capacitación en vivo dirigida por un instructor y experiencia en proyectos de la vida real. Esta capacitación lo ayudará a comprender MySQL en profundidad y lo ayudará a dominar el tema.

¿Tiene alguna pregunta para nosotros? Menciónelo en la sección de comentarios de este artículo sobre SQL Pivot y me pondré en contacto con usted.