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

發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及辦公窗簾等,在成都網(wǎng)站建設(shè)公司、成都全網(wǎng)營銷推廣、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。
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
執(zhí)行結(jié)果效果圖:
那么在沒有出現(xiàn)SQLServer2005之前我們又是怎樣做來達(dá)到這樣的效果的呢?下面我將給大家介紹兩種方法來達(dá)到這個(gè)需求:
方法一:首先計(jì)算表的行號(排名值),根據(jù)指定的組的數(shù)量得到每組內(nèi)的記錄數(shù)量。然后利用組號計(jì)算公式:(行號-1)/組大小+1,返回每條記錄的組號。
SQL代碼如下:
- Code
- eclare@numtilesint;
- set@numtiles=9;--組數(shù)
- selectempid,qty,CAST((rn-1)/tilesize+1asint)astile
- from(selectempid,qty,rn,1.0*numrows/@numtilesastilesizefrom(selectempid,qty,(selectCOUNT(*)fromSalesasS2whereS2.qty
方法二:首先計(jì)算表的行號(排名值),根據(jù)指定的組的數(shù)量得到每組內(nèi)的記錄數(shù)量。然后利用下面組號計(jì)算公式,返回每條記錄的組號。
If(行號<=(組大小+1)*剩余行數(shù))then
組號=(行號-1)/(組大小+1)+1
Else
組號=(行號-剩余行數(shù)-1)/組大小+1
SQL代碼如下:
- Code
- declare@numtileint;
- set@numtile=9;--組數(shù)
- 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
【編輯推薦】
- SQL Server 2005商業(yè)智能的10個(gè)關(guān)鍵特性
- 在T-SQL中使用臨時(shí)表的注意事項(xiàng)
- SQL Server數(shù)據(jù)庫管理常用的SQL和T-SQL語句(1)
- 用T-SQL操作面試SQL Server開發(fā)人員(1)
- SQL Server 2005中的T-SQL
- T-SQL實(shí)用例句
網(wǎng)站題目:NTILE函數(shù)在SQL Server 2000中的實(shí)現(xiàn)方法
標(biāo)題URL:http://www.dlmjj.cn/article/djeoojs.html


咨詢
建站咨詢
