Compartir a través de


Rotación de una tabla en SQL Server

En este artículo se describe cómo rotar una tabla en SQL Server.

Versión del producto original: SQL Server
Número de KB original: 175574

Resumen

En este artículo se describe cómo rotar una tabla de SQL Server. Supongamos que tiene una tabla denominada QTRSALES. La tabla tiene las columnas YEAR, QUARTERy AMOUNT con los datos en el formato siguiente.

Nota:

No hay ninguna fila para el cuarto trimestre de 1996:

Year Quarter (Trimestre) Importe
1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 4 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82

Supongamos que desea rotar la tabla para que pueda ver los datos en el formato siguiente:

YEAR T1 T2 T3 T4
1995 125,000.90 136,000.75 212,000.34 328,000.82
1996 328,000.82 422,000.13 728,000.35 0.00

La consulta que usaría para rotar la tabla se encuentra en la siguiente sección de este artículo.

Consulta de ejemplo para rotar la tabla

Esta es la consulta que usaría para girar la tabla:

SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR

Consulta de tablas grandes

En el caso de las tablas grandes, esta consulta será más rápida:

SELECT YEAR,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) AS Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) AS Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) AS Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) AS Q4
FROM qtrsales q
GROUP BY YEAR

Referencia

FROM: uso de PIVOT y UNPIVOT