[转]SQL2005后的ROW_NUMBER()函数的应用
生活随笔
收集整理的這篇文章主要介紹了
[转]SQL2005后的ROW_NUMBER()函数的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SQL Server 2005后之后,引入了row_number()函數,row_number()函數的分組排序功能使這種操作變得非常簡單
分組取TOP數據是T-SQL中的常用查詢, 如學生信息管理系統中取出每個學科前3名的學生。這種查詢在SQL Server 2005之前,寫起來很繁瑣,需要用到臨時表關聯查詢才能取到。SQL Server 2005后之后,引入了row_number()函數,row_number()函數的分組排序功能使這種操作變得非常簡單。下面是一個簡單示例:
--1.創建測試表 create table #score ( name varchar(20), subject varchar(20), score int ) --2.插入測試數據 insert into #score(name,subject,score) values('張三','語文',98) insert into #score(name,subject,score) values('張三','數學',80) insert into #score(name,subject,score) values('張三','英語',90) insert into #score(name,subject,score) values('李四','語文',88) insert into #score(name,subject,score) values('李四','數學',86) insert into #score(name,subject,score) values('李四','英語',88) insert into #score(name,subject,score) values('李明','語文',60) insert into #score(name,subject,score) values('李明','數學',86) insert into #score(name,subject,score) values('李明','英語',88) insert into #score(name,subject,score) values('林風','語文',74) insert into #score(name,subject,score) values('林風','數學',99) insert into #score(name,subject,score) values('林風','英語',59) insert into #score(name,subject,score) values('嚴明','英語',96) --3.取每個學科的前3名數據 select * from ( select subject,name,score,ROW_NUMBER() over(PARTITION by subject order by score desc) as num from #score ) T where T.num <= 3 order by subject --4.刪除臨時表 truncate table #score drop table #score語法形式:ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)
解釋:根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)
轉自:
http://www.jb51.net/article/29162.htm
參考:
http://msdn.microsoft.com/zh-cn/library/ms186734.aspx
http://www.cnblogs.com/85538649/archive/2011/08/13/2137277.html
?
轉載于:https://www.cnblogs.com/cqcmdwym/p/3668545.html
總結
以上是生活随笔為你收集整理的[转]SQL2005后的ROW_NUMBER()函数的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [物理学与PDEs]第4章习题3 一维理
- 下一篇: svn 文件状态标记含义