亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQLServer 2005 實現排序報表的利器 排序函數RA

系統 3119 0

SQLServer 2005 新增了排名函數 , 一共四個 , 其中 RANK() DENSE_RANK() NTILE() 這三個函數是制作帶有排名列報表的利器 ,ROW_NUMBER() 函數在分頁存儲過程中被廣泛使用

排名函數有一個明顯的共性 , 就是與 over() 子句配合使用

與排名函數一起使用的 over() 子句有兩個參數 partition 分組方式 order by 排序方式

RANK() DENSE_RANK() 是一對兄弟 , 唯一的不同是

當使用 RANK() 進行排名時 由于 order by 參數 的值可能存在相等的情況 , 比如有兩個第一 , 那么下一個會被排名在第三 , 即使用 RANK() 排名時 , 得到數值并不是連續的 (1 1 3), 而是用 DENSE_RANK() , 得到的永遠是連續的 (1 1 2).

語法:

RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )

DENSE_RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )

示例:

USE AdventureWorks ;

GO

SELECT i . ProductID , p . Name , i . LocationID , i . Quantity , RANK () OVER ( PARTITION BY i . LocationID order by i . Quantity ) as RANK

FROM Production . ProductInventory i JOIN Production . Product p

ON i . ProductID = p . ProductID

ORDER BY i . LocationID , RANK

GO

USE AdventureWorks ;

GO

SELECT i . ProductID , p . Name , i . LocationID , i . Quantity , DENSE_RANK () OVER ( PARTITION BY i . LocationID order by i . Quantity ) as DENSE_RANK

FROM Production . ProductInventory i JOIN Production . Product p ON i . ProductID = p . ProductID

ORDER BY i . LocationID , DENSE_RANK ;

GO

結果:

SQLServer 2005 實現排序報表的利器 排序函數RANK()、DENSE_RANK()、NTILE()和ROW_NUMBER()

NTILE() 我的理解是將結果集按片分割, SQLServer 幫助里寫的是存儲桶。

語法:

NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_clause > )

與其他排名函數不同 NTILE() 多了一個參數 integer_expression, 這個參數是一個正整數 , 數據類型支持 bigint. integer_expression 參數決定了結果集最終分成幾片 , 或者是分布到幾個桶中 .

例如 integer_expression 參數為 5, 如果結果集的行數為 50, 正好能夠整除 , 那么這 50 行數據會被分成 5 , 每片 10 行數據 ; 如果不能夠整除 , 結果集是 53 行數據 , 那么第一、二、三片 , 每片 11 行數據 , 其余 10 行數據 .

示例 :

USE AdventureWorks ;

GO

SELECT c . FirstName , c . LastName , NTILE ( 5 ) OVER ( ORDER BY SalesYTD DESC ) AS 'Quartile' , s . SalesYTD , a . PostalCode

From Sales . SalesPerson s JOIN Person . Contact c on s . SalesPersonID = c . ContactID

JOIN Person . Address a ON a . AddressID = c . ContactID

WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ;

GO

結果 :

SQLServer 2005 實現排序報表的利器 排序函數RANK()、DENSE_RANK()、NTILE()和ROW_NUMBER()

ROW_NUMBER() 函數用來生成數據行在結果集中的序號

語法 :

ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )

示例 :

USE AdventureWorks

GO

SELECT c . FirstName , c . LastName , ROW_NUMBER () OVER ( ORDER BY SalesYTD DESC ) AS 'Row Number' , s . SalesYTD , a . PostalCode

FROM Sales . SalesPerson s JOIN Person . Contact c on s . SalesPersonID = c . ContactID

JOIN Person . Address a ON a . AddressID = c . ContactID

WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0

-- 以下示例將返回行號為 50 60 (含)的行,并以 OrderDate 排序。

-- 這在分頁時非常實用

-- 關于 WITH 語法應查閱 CTE 相關內容

USE AdventureWorks ;

GO

WITH OrderedOrders AS

( SELECT SalesOrderID , OrderDate ,

ROW_NUMBER () OVER ( order by OrderDate ) as RowNumber

FROM Sales . SalesOrderHeader )

SELECT *

FROM OrderedOrders

WHERE RowNumber between 50 and 60 ;

結果 :

SQLServer 2005 實現排序報表的利器 排序函數RANK()、DENSE_RANK()、NTILE()和ROW_NUMBER()

SQLServer 2005 實現排序報表的利器 排序函數RANK()、DENSE_RANK()、NTILE()和ROW_NUMBER()


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 不卡无毒免费毛片视频观看 | 狠狠色狠狠色综合久久第一次 | 久久99热久久精品99 | 久久国产精品一区二区三区 | 亚洲大片在线观看 | 精品一区二区三区在线观看视频 | 日本免费在线一区 | 国产精品久久久久久久网站 | 欧美久久久久久久久 | 老子影院午夜 | 天天天天天天操 | 国产99青草全福视在线 | 日韩国产欧美在线观看 | 中文字幕一区二区三区 精品 | 久久99精品久久久久久秒播放器 | 久久一区二区三区免费播放 | 色综合日本 | 久久99亚洲精品久久久久99 | 午夜私人影院在线观看 | 日日摸夜夜添夜夜添一区二区 | 亚洲va在线va天堂va手机 | 在线 亚洲 欧美 | 国产99精品免费视频看6 | 性夜影院爽黄a爽免费看网站 | 国产精品第一 | 97在线免费视频 | 亚洲精品色综合色在线观看 | 欧美一级亚洲一级 | 亚洲视频aaa | 自拍 欧美 在线 综合 另类 | 久久国产精品永久免费网站 | 涩涩www在线观看免费高清 | 香蕉视频18 | 亚洲高清一区二区三区四区 | 99热这里都是精品 | 欧美人成在线 | 日韩视频一区 | 一级做a爱片特黄在线观看免费看 | 欧美成人免费观看的 | 久久亚洲国产精品五月天婷 | 色久综合大榴莲 |