четверг, 11 июля 2013 г.

Как пронумеровать строки по разделам (ROW_NUMBER с PARTITION BY)


-- Например: Пронумеруем строки по заказам
-- Воспользуемся функцией ранжирования ROW_NUMBER
SELECT
    SalesOrderID AS "Номер заказа"
    ,ROW_NUMBER() OVER
    (
         PARTITION BY SalesOrderID -- Правило для создания разделов
         ORDER BY UnitPrice DESC -- Правило нумерации строк внутри раздела
    ) AS "Номер строки"
    ,ProductID AS "Номер товара"
    ,OrderQty AS "Количество"
    ,UnitPrice AS "Цена"
FROM
    AdventureWorks2012.Sales.SalesOrderDetail
ORDER BY -- Сортировка набора
    SalesOrderID
    ,"Номер строки"