Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ SQL\T-SQL ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

FreeBSD and Nix

Общая

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


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

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

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

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

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект