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

ROW_NUMBER() OVER函數的基本用法

系統 2257 0

轉自: http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html

語法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

簡單的說row_number()從1開始,為每一條分組記錄返回一個數字,這里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再為降序以后的沒條xlh記錄返回一個序號。
示例:
xlh?????????? row_num
1700????????????? 1
1500????????????? 2
1085????????????? 3
710??????????????? 4

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)

實例:

初始化數據

create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)

數據顯示為

empid?????? deptid????? salary
----------- ----------- ---------------------------------------
1?????????? 10????????? 5500.00
2?????????? 10????????? 4500.00
3?????????? 20????????? 1900.00
4?????????? 20????????? 4800.00
5?????????? 40????????? 6500.00
6?????????? 40????????? 14500.00
7?????????? 40????????? 44500.00
8?????????? 50????????? 6500.00
9?????????? 50????????? 7500.00

需求:根據部門分組,顯示每個部門的工資等級

預期結果:

empid?????? deptid????? salary????????????????????????????????? rank
----------- ----------- --------------------------------------- --------------------
1?????????? 10????????? 5500.00???????????????????????????????? 1
2?????????? 10????????? 4500.00???????????????????????????????? 2
4?????????? 20????????? 4800.00???????????????????????????????? 1
3?????????? 20????????? 1900.00???????????????????????????????? 2
7?????????? 40????????? 44500.00???????????????????????????????1
6?????????? 40????????? 14500.00???????????????????????????????2
5?????????? 40????????? 6500.00???????????????????????????????? 3
9?????????? 50????????? 7500.00???????????????????????????????? 1
8?????????? 50????????? 6500.00???????????????????????????????? 2

SQL腳本:

SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

?

轉自: http://www.cnblogs.com/digjim/archive/2006/09/20/509344.html

我們知道,SQL Server 2005和SQL Server 2000 相比較,SQL Server 2005有很多新特性。這篇文章我們要討論其中的一個新函數Row_Number()。數據庫管理員和開發者已經期待這個函數很久了,現在終于等到了!


?通常,開發者和管理員在一個查詢里,用臨時表和列相關的子查詢來計算產生行號。現在SQL Server 2005提供了一個函數,代替所有多余的代碼來產生行號。

?我們假設有一個資料庫[EMPLOYEETEST],資料庫中有一個表[EMPLOYEE],你可以用下面的腳本來產生資料庫,表和對應的數據。

?USE [MASTER]
GO

    IF? EXISTS (SELECT NAME FROM SYS.DATABASES WHERE NAME = N'EMPLOYEE TEST')
    
DROP DATABASE [EMPLOYEE TEST]
GO
    CREATE DATABASE [EMPLOYEE TEST]
    
GO
    USE [EMPLOYEE TEST]
    
GO

IF? EXISTS SELECT * FROM SYS.OBJECTS HERE OBJECT_ID = OBJECT_ID(N'[DBO].[EMPLOYEE]') AND TYPE IN (N'U'))
DROP TABLE [DBO].[EMPLOYEE]
GO

    CREATE TABLE EMPLOYEE (EMPID INT, FNAME VARCHAR(50),LNAME VARCHAR(50))
    
GO
    INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', '

POLAND')
    
INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (2021115, 'JIM', 'KENNEDY')
INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (2121000, 'JAMES', 'SMITH')
INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (2011111, 'ADAM', 'ACKERMAN')
INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (3015670, 'MARTHA', 'LEDERER')
INSERT INTO EMPLOYEE? (EMPID, FNAME, LNAME) VALUES (1021710, 'MARIAH', 'MANDEZ')
GO

?我們可以用下面的腳本查詢EMPLOYEE表。

?SELECT EMPID, RNAME, LNAME FROM EMPLOYEE

?這個查詢的結果應該如圖1.0?

2021110

MICHAEL

POLAND

2021110

MICHAEL

POLAND

2021115

JIM

KENNEDY

2121000

JAMES

SMITH

2011111

ADAM

ACKERMAN

3015670

MARTHA

LEDERER

1021710

MARIAH

MANDEZ


圖1.0

?在SQL Server 2005,要根據這個表中的數據產生行號,我通常使用下面的查詢。?

SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME INTO EMPLOYEE2 FROM EMPLOYEE ORDER BY EMPID

?這個查詢創建了一個新的表,用identify函數來產生行號。我們用下面的查詢來看看這個表的數據。?

    SELECT ROWID, EMPID, FNAME, LNAME FROM EMPLOYEE2
  

?上面的查詢結果如圖1.1?

1

1021710

MARIAH

MANDEZ

2

2011111

ADAM

ACKERMAN

3

2021110

MICHAEL

POLAND

4

2021110

MICHAEL

POLAND

5

2021115

JIM

KENNEDY

6

2121000

JAMES

SMITH

7

3015670

MARTHA

LEDERER


圖1.1

?這個查詢結果很明顯EMP=2021110的行是重復的數據。

?要刪除EMPID=2021110的重復數據,我們必須在EMPLOYEE2表中刪除,不能直接在EMPLOYEE中刪除。

?SQL Server 2005提供了一個新的函數(Row_Number())來產生行號。我們可以使用這個新函數來刪除原來表中的重復數據,只用通常的表達方式再加上Row_Number()函數。

?讓我們用Row_Number()函數根據EMPID來產生ROWID。

?SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE

?上面的查詢結果如圖1.2?

1

1021710

MARIAH

MANDEZ

2

2011111

ADAM

ACKERMAN

3

2021110

MICHAEL

POLAND

4

2021110

MICHAEL

POLAND

5

2021115

JIM

KENNEDY

6

2121000

JAMES

SMITH

7

3015670

MARTHA

LEDERER


圖1.2

?在這個結果中,我們可以區別EMPID是2021110的重復數據。

?我們可以用通用表查詢表達式和Row_Numner()函數來選出重復的那行數據。

?WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
SELECT * FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4

上面的查詢結果如圖1.3?

4

2021110

MICHAEL

POLAND


圖1.3

?這一行重復的數據可以用下面這個通用表和Row_Number()函數來刪除。

?WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
DELETE FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4

?刪除以后,我們可以用下面的查詢語句看一下結果。

?SELECT * FROM EMPLOYEE

?這個查詢結果如圖1.4?

2021110

MICHAEL

POLAND

2021115

JIM

KENNEDY

2121000

JAMES

SMITH

2011111

ADAM

ACKERMAN

3015670

MARTHA

LEDERER

1021710

MARIAH

MANDEZ


圖 1.4

?這里我們可以看到,重復的數據已經被刪除了。

?總結

在這篇文章中,我們討論了SQL Server 2005 的新特性Row_Number()函數,還有通常的表表達式,然后如何使用這兩個來刪除重復的行。

來源: http://www.cnblogs.com/fxgachiever/archive/2010/09/15/1826792.html

ROW_NUMBER() OVER函數的基本用法


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕在线观看第二页 | 日本一区二区三区久久 | 尹人香蕉 | 色婷婷色99国产综合精品 | 久草在线中文视频 | 草久视频 | 国产精品区牛牛影院 | 亚洲精品久久一区二区无卡 | 精品精品国产自在香蕉网 | 777奇米影视视频在线播放 | 99热久久这里只有精品2010 | 亚洲无卡视频 | 成人性生活免费看 | 一区二区视频在线观看免费的 | 免费久久精品视频 | 亚洲一区二区三区高清 不卡 | 成人欧美视频免费看黄黄 | 久草在线免费资源 | 亚洲 欧洲 自拍 另类 校园 | 一区二区三区中文 | 日本一二三区视频 | 亚洲国产欧美一区二区欧美 | 亚洲综合日韩 | 日韩精品另类天天更新影院 | 蘑菇视频绿巨人小黄鸭 | 亚洲欧美日韩在线一区二区三区 | 久久夜色精品国产噜噜小说 | 国内精品福利视频 | 亚洲综合精品一二三区在线 | 亚洲sss综合天堂久久久 | 精品国产品香蕉在线 | 亚洲综合精品一区 | 日韩精品特黄毛片免费看 | 国产精品毛片天天看片 | 调教师鞭打总裁奴男男 | 国产伦理久久精品久久久久 | 五月激激激综合网色播免费 | 国产欧美在线观看一区二区 | 大乳女做爰中文字幕 | 日本a在线| 国产成人18黄网站免费 |