Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒SQL\T-SQL⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐FreeBSD and Nix
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA

T-SQL 2014: оконные функции


USE AdventureWorks2014;
GO

--Частоиспользуемые оконные функции

--С помощью 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


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru