Смена таблицы в SQL Server

В этой статье описывается, как повернуть таблицу в SQL Server.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 175574

Сводка

В этой статье описывается, как повернуть таблицу SQL Server. Предположим, что у вас есть таблица с именем QTRSALES. Таблица содержит столбцы YEAR, QUARTERи AMOUNT с данными в следующем формате.

Примечание.

За четвертый квартал 1996 года нет строки:

Year Квартал 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

Теперь предположим, что вы хотите повернуть таблицу, чтобы увидеть данные в следующем формате:

YEAR Q1 В 2-й квартал В3 Вопрос 4
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

Запрос, который будет использоваться для смены таблицы, приведен в следующем разделе этой статьи.

Пример запроса для смены таблицы

Ниже приведен запрос, используемый для смены таблицы:

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

Запрос больших таблиц

Для больших таблиц этот запрос будет выполняться быстрее:

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

Справочные материалы

FROM — использование PIVOT и UNPIVOT