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

Как вывести подитоги (Rollup)


-- Как вывести подитоги (Rollup)

 

-- Вычислим максимальные цены для:

-- Сегментов сочетания товарной линейки, ценовой категории (ProductLine, Class)

SELECT

    Productline

    ,Class

    ,MAX(ListPrice) AS MaxListPrice

FROM AdventureWorks2012.Production.Product

WHERE Class IS NOT NULL AND ProductLine IS NOT NULL

GROUP BY ProductLine, Class

    UNION ALL

-- Товарных линеек (ProductLine)

SELECT

    Productline

    ,NULL AS Class

    ,MAX(ListPrice) AS MaxListPrice

FROM AdventureWorks2012.Production.Product

WHERE Class IS NOT NULL AND ProductLine IS NOT NULL

GROUP BY ProductLine

    UNION ALL

 

-- Всех товаров

SELECT

    NULL AS Productline

    ,NULL AS Class

    ,MAX(ListPrice) AS MaxListPrice

FROM AdventureWorks2012.Production.Product

WHERE Class IS NOT NULL AND ProductLine IS NOT NULL

-- Отсортируем результат

ORDER BY ProductLine, Class;

 

-- (!) У нас нет подитогов по Ценовым категориям (Class)

 

-- А теперь более изящно

 

SELECT

    Productline

    ,Class

    ,MAX(ListPrice) AS MaxListPrice

FROM AdventureWorks2012.Production.Product

WHERE Class IS NOT NULL AND ProductLine IS NOT NULL

GROUP BY ProductLine, Class WITH ROLLUP;

 

-- Если SQL Server >= 2008

SELECT

    Productline

    ,Class

    ,MAX(ListPrice) AS MaxListPrice

FROM AdventureWorks2012.Production.Product

WHERE Class IS NOT NULL AND ProductLine IS NOT NULL

GROUP BY ROLLUP (ProductLine, Class);