--С помощью PARTITION BY мы делим результат запроса на окна
SELECT SalesOrderID,[SalesPersonID],[TerritoryID],[TotalDue],
SUM([TotalDue]) OVER (PARTITION BY [SalesPersonID],[TerritoryID]) AS N'Общее по персоне и территории',
SUM([TotalDue]) OVER (PARTITION BY [SalesPersonID]) AS N'Общая по персоне',
SUM([TotalDue]) OVER () AS N'Общая'
FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
ORDER BY [SalesPersonID],[TerritoryID],[TotalDue]
--С помощью ORDER BY мы можем задать сортировку
SELECT SalesOrderID,[SalesPersonID],[TerritoryID],[TotalDue],
SUM([TotalDue]) OVER (PARTITION BY [SalesPersonID]) AS N'Общая по персоне',
SUM([TotalDue]) OVER (ORDER BY [SalesPersonID] ASC) AS N'Общая с сортировкой'
FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
ORDER BY [SalesPersonID],[TerritoryID],[TotalDue]
--UNBOUNDED PRECEDING - указывает, что надо учитывать все строки/диапазоны с первого и по текущий
--Будет суммировать каждую следующую строку
SELECT SalesOrderID,[SalesPersonID],[TerritoryID],[TotalDue],
SUM([TotalDue]) OVER (ORDER BY [SalesPersonID] ROWS UNBOUNDED PRECEDING) AS N'Суммируемая'
FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
--Будет суммировать каждый следующий диапазон (в примере диапазоном выступает поле [SalesPersonID])
SELECT [SalesPersonID],[TotalDue],
SUM([TotalDue]) OVER (ORDER BY [SalesPersonID] RANGE UNBOUNDED PRECEDING) AS N'Суммируемая'
FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
--ROW_NUMBER() - задает каждой строчке окна последовательный номер
--Должна содержать предложение OVER вместе с предложением ORDER BY
SELECT [SalesPersonID],[TotalDue],
ROW_NUMBER() OVER (ORDER BY [SalesPersonID]) AS R
FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
ORDER BY [SalesPersonID]
--Пример вывода с "постраничной навигацией" используя ROW_NUMBER()
SELECT COUNT(*) AS N'Всего записей' FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
DECLARE @pagenum AS INT = 2800, @pagesize AS INT = 10;
WITH C AS
(
SELECT [SalesPersonID],[TotalDue],
ROW_NUMBER() OVER (ORDER BY [SalesPersonID]) AS N'Номер строки'
FROM [AdventureWorks2014].[Sales].[SalesOrderHeader]
)
SELECT [Номер строки], [SalesPersonID],[TotalDue]
FROM C
WHERE [Номер строки] BETWEEN (@pagenum - 1) * @pagesize + 1 AND @pagenum * @pagesize
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!