Girar una tabla en SQL Server

En este artículo se describe cómo girar 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 girar una tabla de SQL Server. Supongamos que tiene una tabla que se denomina QTRSALES . La tabla tiene las columnas YEAR , QUARTER y AMOUNT con los datos en el formato siguiente.

Nota

No hay ninguna fila para el cuarto trimestre de 1996:

Year 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 girar la tabla para que pueda ver los datos con el siguiente formato:

YEAR Q1 Trim Q3 Tercer
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 siguiente sección 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

Consultar tablas grandes

Para tablas grandes, esta consulta será más rápida:

year=q.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

DESDE: usar PIVOT y UnPivot