OVER 子句 (Transact-SQL)
更新日期: 2006 年 7 月 17 日
确定在应用关联的开窗函数之前,行集的分区和排序。
适用范围:
排名开窗函数
聚合开窗函数。 有关详细信息,请参阅聚合函数 (Transact-SQL)。
Transact-SQL 语法约定
语法
Ranking Window Functions
<OVER_CLAUSE> :: =
OVER ( [ PARTITION BY value_expression , ... [ n ] ]
<ORDER BY_Clause> )
Aggregate Window Functions
<OVER_CLAUSE> :: =
OVER ( [ PARTITION BY value_expression , ... [ n ] ] )
参数
PARTITION BY
将结果集分为多个分区。 开窗函数分别应用于每个分区,并为每个分区重新启动计算。
value_expression
指定对相应 FROM 子句生成的行集进行分区所依的列。<value_expression> 只能引用 FROM 子句可用的列。 它不能引用选择列表中的表达式或别名。<value_expression> 可为列表达式、标量子查询、标量函数或用户定义的变量。
<ORDER BY 子句>
指定应用排名开窗函数的顺序。 有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。重要提示:
在排名开窗函数的上下文中使用时,<ORDER BY 子句> 只能引用通过 FROM 子句可用的列。无法指定整数来表示选择列表中列名称或列别名的位置。 <ORDER BY 子句>不能与聚合开窗函数一起使用。
备注
开窗函数是在 ISO SQL 标准中定义的。SQL Server 提供排名开窗函数和聚合开窗函数。 窗口是用户指定的一组行。开窗函数计算从窗口派生的结果集中各行的值。
可以在单个查询中将多个排名或聚合开窗函数与单个 FROM 子句一起使用。 但是,每个函数的 OVER 子句在分区和排序上可能不同。 OVER 子句不能与 CHECKSUM 聚合函数结合使用。
示例
A. 将 OVER 子句与 ROW_NUMBER 函数结合使用
每个排名函数(ROW_NUMBER、DENSE_RANK、RANK、NTILE)都使用 OVER 子句。 以下示例显示了将 OVER 子句与 ROW_NUMBER 结合使用。
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
GO
B. 将 OVER 子句与聚合函数结合使用
以下示例显示了将 OVER 子句与聚合函数结合使用。 在此示例中,使用 OVER 子句比使用子查询的效率高。
USE AdventureWorks;
GO
SELECT SalesOrderID, ProductID, OrderQty
,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg'
,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count'
,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min'
,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max'
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,43664);
GO
下面是结果集: SalesOrderID ProductID OrderQty 总计 Avg 计数 Min Max
以下示例显示在计算所得值中将 OVER 子句与聚合函数结合使用。
USE AdventureWorks;
GO
SELECT SalesOrderID, ProductID, OrderQty
,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
,CAST(1. * OrderQty / SUM(OrderQty) OVER(PARTITION BY SalesOrderID)
*100 AS DECIMAL(5,2))AS 'Percent by ProductID'
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,43664);
GO
下面是结果集:注意,聚合由 SalesOrderID 计算,并会为每个 SalesOrderID 的每一行计算 Percent by ProductID(ProductID 的百分比)。SalesOrderID ProductID OrderQty 总计 ProductID 的百分比
分享到:
相关推荐
ms sql server2000导入到ms sql server 2005,你只需按照文档里写的方法操作即可。
ms sql2005 驱动包 一个 直接下载导入就可以用
MS SQL SERVER2005 SP1镜像高可用性实施手册 SQL SERVER2005 的镜像功能是在这个版本中新增的一个功能,该功能大大提高了在系统在 出现故障时,切换到镜像服务器上的速度,大约10 秒以内,这要比SQL SERVER2005 群集...
SQL2005新特性研究报告-编程性第二部分\SQL2005新特性研究报告-第二部分\SQL2005新特性研究报告-第二部分.doc
开发的家庭收支管理系统 (VS2008)C#+MS SQL2005 EXPRESS 模块如下: 用户管理 收入管理 支出管理 总账管理 源码及数据库备份,数据库结构sql语句见附件 QQ:31841834
MS-SQL 2005教案: 1、SQL Server2005 安装与配置; 2、SQL Server2005 管理; 3、SQL Server2005 调优;
在当今的互联世界中,数据和管理数据的系统必须始终为用户可用且能够确保安全,有了SQL Server 2005,组织内的用户和IT专家将从减少应用程序宕机时间、提高可伸缩性及性能、更紧密的安全控制中获益。SQL Server 2005...
ms sql2005 安装指南 ,介绍,如何使用版本以及安装。
SQL2005新特性_管理可用性.doc SQL2005新特性_管理可用性.doc SQL2005新特性_管理可用性.doc
SQL SERVER 2005安装图解,我就是对着这个图安装起来的。
安装MS_SQL2005express版数据库.pdf
JDBC连接MS SQL Server 2005 与 2000区别 JDBC连接MS SQL Server 2005 与 2000区别 JDBC连接MS SQL Server 2005 与 2000区别
有了 SQL Server 2005,组织内的用户和信息技术 (IT) 专家将从减少的应用程序停机时间、提高的可伸缩性及性能、更紧密而灵活的安全控制中获益。SQL Server 2005 也包括了许多新的和改进的功能来帮助 IT 工作人员更...
10分钟学会SQL SQL server 2005 数据库管理教程
SQL Server 2005版本特性介绍
MS SQL 基础语句教程,针对于2005
[SQL2005]安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
sqlserver2005 安装图解教程以及SQL 2005 SP3补丁安装图文教程
MS SQL,中文版本SQL 语句帮助文件
MS-SQL2005服务器登录名、角色、数据库用户、角色的创建 不用SA密码,更安全!