当前位置:首页 > 系统运维 > 正文内容

NTILE函数在SQL Server 2000中的实现 ***

a8116255311年前 (2015-10-04)系统运维15

各个组有编号,编号从一开始。对于每一个行,NTILE函数将返回此行所属的组的编号。假如分区的行数不能被整数整除,则将导致一个成员有两种大小不同的组。按照OVER子句指定的顺序,较大的组排在较小的组前面。用NTILE函数计算排名值与其它 *** 一样简单(分区排名方案和排名值效率分析【图文+测试代码】),唯一的区别在于,NTILE函数接受一个表示组的数量的参数,而其它的 *** 是没有参数的。

SQL代码和效果如下:

Code  ifOBJECT_ID('Sales')isnotnull  droptableSales;  createtableSales  (  empidvarchar(10)notnullprimarykey,  qtyintnotnull  )  insertintoSales(empid,qty)values('A',300);  insertintoSales(empid,qty)values('B',100);  insertintoSales(empid,qty)values('C',200);  insertintoSales(empid,qty)values('D',200);  insertintoSales(empid,qty)values('E',250);  insertintoSales(empid,qty)values('F',300);  insertintoSales(empid,qty)values('H',250);  insertintoSales(empid,qty)values('I',250);  insertintoSales(empid,qty)values('J',100);  insertintoSales(empid,qty)values('K',200);  insertintoSales(empid,qty)values('G',100);  --------------------------------------------------  selectempid,qty,NTILE(9)over(orderbyqty)astilefromSales 

执行结果效果图:

那么在没有出现SQLServer2005之前我们又是怎样做来达到这样的效果的呢?下面我将给大家介绍两种 *** 来达到这个需求:

*** 一:首先计算表的行号(排名值),根据指定的组的数量得到每组内的记录数量。然后利用组号计算公式:(行号-1)/组大小+1,返回每条记录的组号。

SQL代码如下:

Code  eclare@numtilesint;  set@numtiles=9;--组数   selectempid,qty,CAST((rn-1)/tilesize+1asint)astile  from(selectempid,qty,rn,1.0*numrows/@numtilesastilesizefrom(selectempid,qty,(selectCOUNT(*)fromSalesasS2whereS2.qty
  

*** 二:首先计算表的行号(排名值),根据指定的组的数量得到每组内的记录数量。然后利用下面组号计算公式,返回每条记录的组号。

If(行号<=(组大小+1)*剩余行数)then

组号=(行号-1)/(组大小+1)+1

Else

组号=(行号-剩余行数-1)/组大小+1

SQL代码如下:

Code  declare@numtileint;  set@numtile=9;--组数   selectempid,qty,rn,  casewhenrn<=(tilesize+1)*remAInder  then(rn-1)/(tilesize+1)+1  else(rn-remainder-1)/(tilesize)+1  endastiles  from (  selectempid,qty,rn,numrows/@numtileastilesize,numrows%@numtileasremainder  from (  selectempid,qty,(selectCOUNT(*)fromSalesasS2whereS2.qty
  
   )asD1  
   )asD2orderbyqty,empid 
  

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/22488.html

分享给朋友:

“NTILE函数在SQL Server 2000中的实现 *** ” 的相关文章

windows 7/8.1正在启动windows时间长的解决方法

windows 7/8.1正在启动windows时间长的解决方法

正在启动windows时间长怎么办 小编带来了Windows 7/8.1正在启动windows时间长解决方法,假如有朋友在安装完Windows系统之后一直停留在“正在启动windows”的话,不妨试一试下文的方法哦~ 原因:Windows 7/8.1不完全支持UEFI,需要CSM(Comp...

windows 7系统开机提示press any key to restart的故障分析及解

windows 7系统开机提示press any key to restart的故障分析及解

Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...

Skylake平台不能通过USB接口装windows 7系统

Skylake平台不能通过USB接口装windows 7系统

Intel会在2015年推出Broadwell、Skylake两代14nm处理器,前者可以使用9系芯片组,Skylake升级到了LGA1151插槽,需要搭配新的100系列芯片组,但初期的Skylake-S又不能超倍频,所以今年Q2季度开始会很混杂。Skylake一代会支持DDR4,100系列芯片组升...

windows 7系统怎么取消禁ping命令?

windows 7系统怎么取消禁ping命令?

当我在虚拟机的linux系统中ping本机的ip发现ping不通,而本机可以ping通虚拟机中的ip。应该是出于安全考虑吧,Windows 7默认在防火墙里禁止了。 1、查看主机ip 打开“开始”程序中的“附件”,找到“命令提示符”打开。输入命令:ipconfig,可以看到本机的ip是192.1...

windows 7旗舰版系统提示应用程序错误代码0xc0000409的故障原因

windows 7旗舰版系统提示应用程序错误代码0xc0000409的故障原因

问题现象,具体如下所示:  故障分析: 一般来说,出现这种情况是因为电脑误删系统文件或者是系统文件被顽固木马破坏。       解决方法: 1、下载360安全卫士,找到里面的急救箱开始急救,然后进行修复,完成后重新启动; 2、下载瑞...

windows 7如何创建拨号连接

windows 7如何创建拨号连接

一、打开控制面板,选择“网络和共享中心”; 二、在网络和共享中心中选择“设置新的连接或网络”; 三、选择连接到Internet; 四、选择“仍要设置新的连接”; 五、选择“宽带PPPoE ”; 六、输入对应的宽带帐号及密码,点击连接即可;...