Обертання таблиці на сервері SQL Server


Загальні відомості


У цій статті описано, як обертати таблицю SQL Server. Припустімо, у вас є таблиця, яка називається Qtrsales. Таблиця містить стовпці рік, квартал і сума з даними в такому форматі (Зверніть увагу, що немає рядка для четвертого кварталу 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 
Тепер припустимо, що потрібно повернути таблицю так, щоб вони могли переглядати дані в такому форматі:
   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 
Запит, який використовуватиметься для повертання таблиці, міститься в наступному розділі цієї статті.

Зразок запиту для повертання таблиці

Нижче наведено запит, який використовуватиметься для обертання таблиці.
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

Запит для великих таблиць

Для великих таблиць цей запит буде швидшим:
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