查看: 6242|回复: 0
打印 上一主题 下一主题

探讨SQL Server 2005窗口函数

[复制链接]
跳转到指定楼层
1#
发表于 2007-10-10 19:14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
SQL Server 2005中的窗口函数(window function)与微软Windows无关;相反,它们建立数据窗口。窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地恢复累计总数、移动平均值、以及执行其它计算。

一个SQL Server窗口是对函数应用的行的分区。你使用OVER(…)子句指定一个窗口,你可以对任何一个聚合函数应用这个子句。通常来说,你把数据分成几个组,但OVER()的自变量可选。

列表A说明如何一次搜集几个聚集,甚至根据聚合进行其它计算。这样就可得到列表B中的结果集。我把结果集限定为一个单独的OrderID,那么查询将只产生一个窗口。你可以用各种方式修改子句,如使用一个IN()子句列出一组特殊的顺序,或使用一个BETWEEN子句推导一个顺序范围内的统计值。最后你指定的每个OrderID都得到一个窗口。

窗口函数功能非常强大,建立起来也十分容易。你可以使用这个技巧立即搜索到大量统计值。这个教程中的例子指出,你可以在单独一个查询中搜索任何统计值集合。

列表A

USE AdventureWorks2;
GO
SELECT SalesOrderID, ProductID, OrderQty AS 'Item Qty'    ,
SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total Qty'    ,
AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Average Qty'    ,
COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total Count'    ,
MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Minimum Count'    ,
MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Maximum Count'      ,
LineTotal      ,
AVG(LineTotal) OVER(PARTITION BY SalesOrderID) AS 'Average Amount'      ,
SUM(LineTotal) OVER(PARTITION BY SalesOrderID) AS 'Total Amount'      ,
(LineTotal/SUM(LineTotal) OVER(PARTITION BY SalesOrderID)) * 100  AS 'Percent'FROM Sales.SalesOrderDetail WHERE SalesOrderID = 43664O
RDER BY ProductID
GO


列表B

43664   714   1     14    1     8     1     4     28.840400   3054.07610024432.608800      0.118000
43664   716   1     14    1     8     1     4     28.840400   3054.07610024432.608800      0.118000
43664   771   3     14    1     8     1     4     6119.9820003054.07610024432.608800      25.048400
43664   772   1     14    1     8     1     4     2039.9940003054.07610024432.608800      8.349400
43664   773   1     14    1     8     1     4     2039.9940003054.07610024432.608800      8.349400
43664   775   4     14    1     8     1     4     8099.9760003054.07610024432.608800      33.152300
43664   777   2     14    1     8     1     4     4049.9880003054.07610024432.608800      16.576100
43664   778   1     14    1     8     1     4     2024.9940003054.07610024432.608800      8.288000
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表