如何在SQL Server中使用row_number()

时间:2011-04-16 11:06:29

标签: sql-server row-number

我想更新列row_number的{​​{1}}为1的行数据。但是这种语法提供错误:

p_id

3 个答案:

答案 0 :(得分:7)

您无法直接使用ROW_NUMBER() - 您需要例如使用CTE(通用表格表达式):

;WITH DataToUpdate AS
(
    SELECT
       SomeID,
       p_id,
       ROW_NUMBER() OVER(ORDER BY .......) AS 'RowNum'
    FROM
       dbo.app1
)
UPDATE DataToUpdate
SET p_id = 1
WHERE 
   RowNum = 1

为了使用ROW_NUMBER函数,您还需要至少一个ORDER BY子句来定义行的排序顺序。

从您的问题来看,您不希望通过哪个标准(列)来确定您的ROW_NUMBER(),并且还不清楚哪种列可以唯一标识一行(以便可以应用UPDATE

答案 1 :(得分:1)

这将只更新该年龄段的第一位员工。可用作彩票类型逻辑

create table emp(name varchar(3),Age int, Salary int, IncentiveFlag bit)

insert into emp values('aaa',23,90000,0);
insert into emp values('bbb',22,50000,0);
insert into emp values('ccc',63,60000,0);
insert into emp values('ddd',53,50000,0);
insert into emp values('eee',23,80000,0);
insert into emp values('fff',53,50000,0);
insert into emp values('ggg',53,50000,0);

update A
set IncentiveFlag=1
from 
(
        Select row_number() over (partition by Age order by age ) AS SrNo,* from emp
)A
where A.SrNo=1

答案 2 :(得分:0)

删除重复项; WITH CTE(名称,地址1,电话,RN) 如 ( SELECT Name,Address1,Phone, ROW_NUMBER()OVER(名称按名称分区)AS RN ) 从CTE DELERE RN>删除1