Girar 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 siguiente formato.

Nota:

No hay ninguna fila para el cuarto trimestre de 1996:

Año Trimestre Amount
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

Ahora, supongamos que desea rotar la tabla para que pueda ver los datos en el formato siguiente:

YEAR Q1 Q2 Q3 Q4
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 girar la tabla se encuentra en la sección siguiente de este artículo.

Consulta de ejemplo para girar 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