Ejemplo
La cláusula PIVOT se puede utilizar en SQL Server (Transact-SQL).
Veamos un ejemplo. Si tuviéramos una tabla de empleados que contuviera los siguientes datos:
número_empleado | apellido | primer_nombre | salario | dept_id |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Puertas | Steve | 65000 | 30 |
Y ejecutamos la siguiente declaración SQL que crea una tabla cruzada en la consulta usando la cláusula PIVOT:
Devolvería el siguiente resultado:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
Este ejemplo crearía una tabla dinámica para mostrar el salario total para dept_id 30 y dept_id 45. Los resultados se muestran en una fila con los dos departamentos que aparecen cada uno en su propia columna.
Ahora, separemos la cláusula PIVOT y expliquemos cómo funcionó.
Especifique las columnas en los resultados de la tabulación cruzada
Primero, queremos especificar qué campos incluir en nuestros resultados de tabulación cruzada. En este ejemplo, queremos incluir el valor literal «TotalSalary» como la primera columna de la tabla dinámica. Y queremos crear una columna para dept_id 30 y una segunda columna para dept_id 45. Esto nos da 3 columnas en nuestra tabla dinámica.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Especifique la fuente Datos de tabla
A continuación, debemos especificar una instrucción SELECT que devolverá los datos de origen para la tabla dinámica.
En este ejemplo, queremos devolver los valores dept_id y salario de la tabla de empleados:
(SELECT dept_id, salary FROM employees) AS SourceTable
Debe especificar un alias para la consulta de origen. En este ejemplo, hemos asignado un alias a la consulta como SourceTable.
Especificar función agregada
A continuación, debemos especificar qué función agregada usar al crear nuestra consulta de tabulación cruzada. Puede usar cualquier agregado, como las funciones SUM, COUNT, MIN, MAX o AVG.
En este ejemplo, usaremos la función SUM. Esto sumará los valores de salario:
PIVOT(SUM(salary)
Especificar valores dinámicos
Por último, debemos especificar qué valores dinámicos incluir en nuestros resultados . Estos se utilizarán como encabezados de columna en nuestra consulta de tabulación cruzada.
En este ejemplo, solo devolveremos los valores dept_id de 30 y 45. Estos valores se convertirán en nuestros encabezados de columna en nuestro pivote. mesa. Además, tenga en cuenta que estos valores son una lista finita de los valores dept_id y no necesariamente contendrán todos los valores posibles.
FOR dept_id IN (, )
Ahora, cuando lo pongamos todo junto, obtenemos la siguiente tabla dinámica:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |