среда, 20 марта 2013 г.

Как вывести сводную таблицу средствами T-SQL


-- Как вывести сводную таблицу средствами T-SQL
-- (SQL Server).Версия >= 2005

-- Выведем результат вычисления максимальных цен для сегментов (ProductLine, Class) со всеми подитогами

SELECT
         Productline
         ,Class
         ,MAX(ListPrice) AS MaxListPrice
FROM AdventureWorks2012.Production.Product
WHERE    Class IS NOT NULL
         AND ProductLine IS NOT NULL
         AND Style IS NOT NULL
GROUP BY ProductLine, Class WITH CUBE
ORDER BY ProductLine, Class;


-- Не самое удобное и и наглядное представление для конечного пользователя..
-- Может ли SQL Server вывести сводную таблицу (Pivot) как Excel?

-- Не самый простой синтаксис,
SELECT
    ProductLine, [L],[M],[H]
FROM
(
    SELECT
             Class
             ,ProductLine
             ,ListPrice
    FROM AdventureWorks2012.Production.Product
    WHERE    Class IS NOT NULL
             AND ProductLine IS NOT NULL
) AS Src
PIVOT
(
    MAX(ListPrice) FOR Class IN ([L],[M],[H])
) AS Pvt;

-- Но довольно наглядный результат