
2008年05月15日 19:15:55
Row_Number()函数的使用
|
我们可以用下面的脚本查询EMPLOYEE表。 SELECT EMPID, RNAME, LNAME FROM EMPLOYEE 这个查询的结果应该如图1.0
图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.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.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
图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
图 1.4 这里我们可以看到,重复的数据已经被删除了。 Tags:
Row Number
sql 2005
|
一共有 2 条评论