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

Как посчитать нарастающие итоги по разделам



-- Как посчитать нарастающие итоги по разделам
-- Посчитаем нарастающие итоги по месяцам внутри года

  
;WITH [Итоги по годам]
AS
(
    SELECT
        YEAR(OH.OrderDate) AS "Год"
        ,MONTH(OH.OrderDate) AS "Месяц"
        ,SUM(OD.LineTotal) AS "Итого"
    FROM
        AdventureWorks2012.Sales.SalesOrderHeader AS OH
            INNER JOIN
        AdventureWorks2012.Sales.SalesOrderDetail AS OD
            ON OD.SalesOrderID = OH.SalesOrderID
    GROUP BY YEAR(OH.OrderDate), MONTH(OH.OrderDate)
)
SELECT
    "Год"
    ,"Месяц"
    ,"Итого"
    ,SUM("Итого") OVER
        (
            PARTITION BY "Год" ORDER BY "Год", "Месяц"
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS "Нарастающий итог"
FROM [Итоги по годам]
ORDER BY "Год", "Месяц";