自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NTILE函數(shù)在SQL Server 2000中的實(shí)現(xiàn)方法

數(shù)據(jù)庫(kù) SQL Server
眾所周知,NTILE函數(shù)是SQL Server 2005的新特性之一,用于將有序分區(qū)中的行分發(fā)到指定數(shù)目的組中。

各個(gè)組有編號(hào),編號(hào)從一開(kāi)始。對(duì)于每一個(gè)行,NTILE函數(shù)將返回此行所屬的組的編號(hào)。如果分區(qū)的行數(shù)不能被整數(shù)整除,則將導(dǎo)致一個(gè)成員有兩種大小不同的組。按照OVER子句指定的順序,較大的組排在較小的組前面。用NTILE函數(shù)計(jì)算排名值與其它方法一樣簡(jiǎn)單(分區(qū)排名方案和排名值效率分析【圖文+測(cè)試代碼】),唯一的區(qū)別在于,NTILE函數(shù)接受一個(gè)表示組的數(shù)量的參數(shù),而其它的方法是沒(méi)有參數(shù)的。

SQL代碼和效果如下:

  1. Code  
  2. ifOBJECT_ID('Sales')isnotnull  
  3. droptableSales;  
  4. createtableSales  
  5. (  
  6. empidvarchar(10)notnullprimarykey,  
  7. qtyintnotnull  
  8. )  
  9. insertintoSales(empid,qty)values('A',300);  
  10. insertintoSales(empid,qty)values('B',100);  
  11. insertintoSales(empid,qty)values('C',200);  
  12. insertintoSales(empid,qty)values('D',200);  
  13. insertintoSales(empid,qty)values('E',250);  
  14. insertintoSales(empid,qty)values('F',300);  
  15. insertintoSales(empid,qty)values('H',250);  
  16. insertintoSales(empid,qty)values('I',250);  
  17. insertintoSales(empid,qty)values('J',100);  
  18. insertintoSales(empid,qty)values('K',200);  
  19. insertintoSales(empid,qty)values('G',100);  
  20. --------------------------------------------------  
  21. selectempid,qty,NTILE(9)over(orderbyqty)astilefromSales 

執(zhí)行結(jié)果效果圖:

那么在沒(méi)有出現(xiàn)SQLServer2005之前我們又是怎樣做來(lái)達(dá)到這樣的效果的呢?下面我將給大家介紹兩種方法來(lái)達(dá)到這個(gè)需求:

方法一:首先計(jì)算表的行號(hào)(排名值),根據(jù)指定的組的數(shù)量得到每組內(nèi)的記錄數(shù)量。然后利用組號(hào)計(jì)算公式:(行號(hào)-1)/組大小+1,返回每條記錄的組號(hào)。

SQL代碼如下:

  1. Code  
  2. eclare@numtilesint;  
  3. set@numtiles=9;--組數(shù)  
  4.  
  5. selectempid,qty,CAST((rn-1)/tilesize+1asint)astile  
  6. from(selectempid,qty,rn,1.0*numrows/@numtilesastilesizefrom(selectempid,qty,(selectCOUNT(*)fromSalesasS2whereS2.qty

方法二:首先計(jì)算表的行號(hào)(排名值),根據(jù)指定的組的數(shù)量得到每組內(nèi)的記錄數(shù)量。然后利用下面組號(hào)計(jì)算公式,返回每條記錄的組號(hào)。

If(行號(hào)<=(組大小+1)*剩余行數(shù))then

組號(hào)=(行號(hào)-1)/(組大小+1)+1

Else

組號(hào)=(行號(hào)-剩余行數(shù)-1)/組大小+1

SQL代碼如下:

  1. Code  
  2. declare@numtileint;  
  3. set@numtile=9;--組數(shù)  
  4.  
  5. selectempid,qty,rn,  
  6. casewhenrn<=(tilesize+1)*remainder  
  7. then(rn-1)/(tilesize+1)+1  
  8. else(rn-remainder-1)/(tilesize)+1  
  9. endastiles  
  10. from 
  11. (  
  12. selectempid,qty,rn,numrows/@numtileastilesize,numrows%@numtileasremainder  
  13. from 
  14. (  
  15. selectempid,qty,(selectCOUNT(*)fromSalesasS2whereS2.qty
  16. )asD1  
  17. )asD2orderbyqty,empid 

【編輯推薦】

  1. SQL Server 2005商業(yè)智能的10個(gè)關(guān)鍵特性
  2. 在T-SQL中使用臨時(shí)表的注意事項(xiàng)
  3. SQL Server數(shù)據(jù)庫(kù)管理常用的SQL和T-SQL語(yǔ)句(1)
  4. 用T-SQL操作面試SQL Server開(kāi)發(fā)人員(1)
  5. SQL Server 2005中的T-SQL
  6. T-SQL實(shí)用例句
    責(zé)任編輯:彭凡 來(lái)源: cnblogs
    相關(guān)推薦

    2010-11-10 15:23:55

    SQL SERVER

    2011-03-23 10:08:09

    2011-08-17 09:34:57

    SQL Server

    2009-05-26 10:21:07

    2011-08-10 09:12:44

    SQL Server插入圖像存儲(chǔ)過(guò)程

    2010-06-18 10:34:38

    SQL Server

    2010-10-28 16:17:22

    2010-07-16 09:17:07

    SQL Server

    2010-07-26 10:39:14

    SQL Server

    2010-07-08 15:55:25

    SQL Server

    2011-08-23 16:23:13

    OracleMySQLSQL Server

    2011-07-22 13:46:41

    SQL Server MDAC

    2010-11-11 10:53:22

    SQL Server遍

    2010-07-01 11:20:38

    SQL Server

    2010-06-18 13:14:26

    SQL Server

    2010-11-10 14:35:17

    SQL Server創(chuàng)

    2011-04-01 10:52:39

    SQL Server XML

    2010-07-02 14:20:30

    SQL Server2

    2011-08-10 09:35:59

    SQL Server Windows7

    2010-11-08 11:22:21

    SQL Server同
    點(diǎn)贊
    收藏

    51CTO技術(shù)棧公眾號(hào)