Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
, QUARTER
y 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