SQL2005新增函数

SQL2005新增了几个结果集行号、排名、分组等函数,给我们带来了很大的方便。

 

1. ROW_NUMBER函数
    返回结果集分区内行的序列号。SQL表是基于集合的,没有像DBF,ACCESS这样的记录行的概念。ROW_NUMBER函数返回行号不是数据表的物理行号,而是结果集分区内行的序列号。

    如:SELECT ROW_NUMBER() OVER (ORDER BY ProdCode) AS rownum, * FROM t_Product

   

      返回基于列ProdCode排序集合的行号。利用ROW_NUMBER 及 OVER排序子句,我们可以实现数据分页功能,而以前要比较复杂的代码才能实现。

SELECT   TOP ( 10 ) prodcode,name  FROM  (   SELECT  prodcode,name, ROW_NUMBER()  OVER  ( ORDER   BY  prodcode)  AS  ROW_Number  FROM  t_product)  as  T  WHERE  Row_Number  >  (( 5   -   1 *   10

     这条语句显示产品表的第5页 ,每页10行记录。

 

2. 分组 NTITLE

     NTITLE函数将指定数据集划分成N个组,分组时由Orderby指定排序列。如将产品表划分成10个组:

Select   prodcode,name,ProdTypeCode,NTile( 10 OVER ( ORDER   BY  ProdTypeCode)  AS  NTile  From   t_product

      

3. RANK、DENSE_RANK排名函数

     排名函数很容易实现诸如销售排名报表这样的功能,同ROW_NUMBER、NTITLE一样需要指定OVER 排名窗口函数,确定行集的分区和排序。如实现按业务员的销量排名表。

Select   prodid, Sum (quantity)  as  Total,Rank()  OVER ( ORDER    BY   Sum (quantity)  desc AS  Rank      From    secontdetl    Group   by  prodid

     运行结果如下:

 

     DENSE_RANK与RANK不同的是返回指定元组在指定集中的排名(排名从 1 开始),但排名号不间断。即如果有2个并列第1名,那么RANK函数第3行记录将是排名3,而DENSE_RANK是2.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值