Cómo girar una tabla en SQL Server


Resumen


En este artículo se describe cómo girar una tabla de SQL Server. Suponga que tiene una tabla que se denomina QTRSALES. La tabla tiene las columnas año, trimestre y cantidad con los datos en el siguiente formato (tenga en cuenta que no hay ninguna fila para el cuarto trimestre de 1996):
   Year     Quarter     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, suponga que desea girar la tabla para ver los datos con el siguiente formato:
   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 siguiente sección de este artículo.

Consulta de ejemplo para girar la tabla

A continuación se muestra 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 para tablas grandes

Para las tablas de gran tamaño, 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 Q4FROM qtrsales qGROUP BY year