SQL Server Window Function窗体函数之SQL Windowing

SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理

Running totals

Moving averages

Gaps and islands

先看一个简单的应用 - 按照订单额从高到低对订单表信息做一个排名

USE TSQL2012
GO

SELECT orderid,
       orderdate,
       val,
       RANK() OVER(ORDER BY val DESC) AS rnk
FROM Sales.OrderValues
ORDER BY rnk

查询结果 -

OrderID OrderDate             Val    Rnk

10865    2008-02-02 00:00:00.000    16387.50    1

10981    2008-03-27 00:00:00.000    15810.00    2

11030    2008-04-17 00:00:00.000    12615.05    3

10889    2008-02-16 00:00:00.000    11380.00    4

10417    2007-01-16 00:00:00.000    11188.40    5

10817    2008-01-06 00:00:00.000    10952.85    6

10897    2008-02-19 00:00:00.000    10835.24    7

10479    2007-03-19 00:00:00.000    10495.60    8

OVER 的作用

OVER 的作用就是定义了行集窗体,这个窗体的集合为当前行提供了一个上下文环境. RANK 函数根 据指定的集合以及行集的排序顺序计算出当前行的排名, 以 Rnk = 5 为例, 排序后这条数据的前面有 4条数据,所以它的排名就是 4 + 1 = 5

再总结简单一点就是, OVER 定义了一个行的集合, 它是一个函数, 每次向当前行返回一个唯一的 值, 如何返回? 在这个例子中就使用 RANK 函数返回了当前行的一个排名.

与OVER搭配使用的其它函数

聚合的函数 - SUM, COUNT, MIN, MAX

排名的函数 - RANK, DENSE_RANK, ROW_NUMBER, NTILE

Distribution 函数 - PERCENT_RANK, CUME_DIST, PERCENTILE_CONT, PERCENTILE_DISC

Offset 函数  - LAG, LEAD, FIRST_VALUE, LAST_VALUE

SQL Server Window Function 的应用

窗体函数的应用非常广泛 - 像分页,去重,分组的基础上返回 Top N 的行, 计算 Running Totals,Gaps and islands, 百分率, Hierarchy 排序, Pivoting 等等

使用 Windows 窗体函数的原因一方面是因为 SQL Server 的优化器不够完美, 尽管足够强大, 但 是并不会涵盖所有的优化规则.

第二, 在执行计划的选择上,SQL Server 并不会真正执行所有有可能的计划来获取一个最优的选 择,对于 SQL 本身这种指令性语言的解析和优化优化器只能说是在最短时间里尽量做到足够好,选择 一个好的执行计划. 而 Window 窗体函数本身就经历过了很好的调优处理, 所以性能会更加好一 些.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, server
, 窗体
, sql 表连接数据去重
, 2008
, 00
一个
windowing function、window窗体应用程序、window打开窗体、function window、window load function,以便于您获取更多的相关知识。

时间: 2016-05-01

SQL Server Window Function窗体函数之SQL Windowing的相关文章

安装sql server 2008 management提示已安装 SQL Server 2005 Express的解

SQL Server 2005 Express 工具不是sql server 2005 management,不用卸载sql server 2005 management,用一个小技巧就行   安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 SQL Server 2005 Express 工具.若要继续,请删除 SQL Server 2005

安装sql server 2008 management提示已安装 SQL Server 2005 Express

  安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 SQL Server 2005 Express 工具.若要继续,请删除 SQL Server 2005 Express 工具.sql server 2005 management和sql server 2008 management不是兼容吗?为什么会有这样的提示? 答案是SQL Server

sql server 2008 r2-win7旗舰版安装sql server2008 R2时出现错误

问题描述 win7旗舰版安装sql server2008 R2时出现错误 win7旗舰版安装sql server2008 R2时,出现错误"MOF 编译器无法连接 WMI 服务器",详细如下,请帮忙诊断,谢谢! Overall summary: Final result: SQL Server 安装失败.若要继续操作,请调查失败原因,更正问题,卸载 SQL Server,然后重新运行 SQL Server 安装程序. Exit code (Decimal): -2068052377 E

Sql Server 2005自定义Split函数

 要求取得字符串aa,dd,cc,rr,fff中某个位置的字符串,如果在C#或Java很容易通过Split来实现,但是在Sql Server中就没有直接提供Split这个函数. 当然,此类问题总是可以解决的. ALTER function [dbo].[core_split] ( @str varchar(100), @split char(1), @index int ) returns varchar(10) as begin declare @count int declare @s va

SQL Server中的Rounding函数

问题 最近我试着在自己的应用中使用四舍五入的值,我和我的用户在报表应用中的 计算问题存在分歧.所有的代码都在T-SQL中,但是我认为报表问题与数据类型和 向下取整或向上取整规则关系密切.请问您有没有这方面的高见?我想看到一些带 有不同编码选项的例子. 专家解答 如果不理解基本的数据类型和四舍五入函数,那么你就可能误解四舍五入.由 于数据类型的差异(比如integer,float, decimal等等),四舍五入后的值可能 会不同.另外,由于在计算中使用的SQL Server舍入函数(ROUND(

SQL Server 2012 引入CONCAT函数

  Sql server 2012 加入了一些新的系统函数, 下边简单介绍一下CONCAT CONCAT 函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个参数,参数类型不一定是字符串类型,也可以是可以隐式转换为字符串的类型比如int ,float等类型.只要符合sql 2012的能隐式转换为字符串的规则即可,当我们想把两个值类型的数据连接起来的时候,不需要先将它们转为nvarchar然后再通过"+"来连接了 如果传入的参数为null,则会把它隐式转换为空字符串,如

Sql Server 数据库日期格式化函数

  Sql Server 中一个非常强大的日期格式化函数 Select CONVERT(varchar(100), GETDATE(), 0) : 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1) : 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2) : 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3) : 16/0

SQL Server应用程序中的高级SQL注入

server|程序|高级 介绍: SQL是一种用于关系数据库的结构化查询语言.它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92.典型的执行语句是query,它能够收集比较有达标性的记录并返回一个单一的结果集.SQL语言可以修改数据库结构(数据定义语言)和操作数据库内容(数据操作语言).在这份文档中,我们将特别讨论SQLSERVER所使用的Transact-SQL语言. 当一个攻击者能够通过往query中插入一系列的sql语句来操作数据写入到应用程序中去,我们管这种方法定

SQL Server中使用外部命令执行sql脚本

server|脚本|执行 Author:David EulerDate: 2004/09/28Email:de_euler-david@yahoo.com.cn 有任何问题,请与我联系:)    有时候我们需要多次运行一个文件夹下所有的sql脚本(可能时txt或者sql等文本文件)来更新Schema,文件多的时候需要多次执行,那么可以使用多条语句来执行sql脚本.--下面的查询语句在SQL Query中运行,将执行d:\vss下面的指定sql脚本,这些脚本的后缀都是txtexec master.