日历

2008 7.7 Mon
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

文章搜索

日志文章

2008年05月15日 19:15:55

Row_Number()函数的使用

我们可以用下面的脚本查询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
在这个结果中,我们可以区别EMPID2021110的重复数据。
我们可以用通用表查询表达式和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
这里我们可以看到,重复的数据已经被删除了。


Tags: Row Number   sql 2005  

类别: database |  评论(2) |  浏览(404) |  收藏
2楼 [匿名]<a href=\&qu 2008年05月15日 23:53:28 Says:
<a href="http://www.zcyq.net/xiangxi/mafulu7.htm" target="_blank">程控箱式电炉</a>
1楼 [匿名]<a href=\&qu 2008年05月15日 23:53:24 Says:
<a href="http://www.zcyq.net/xiangxi/mafulu7.htm" target="_blank">程控箱式电炉</a>
发表评论