4

row_number列()のが1である行データを更新したいのp_idですが、この構文はエラーを提供しています:

update app1 
set p_id = 1 
where Row_Number() = 1 over(p_id) 
4

3 に答える 3

7

ROW_NUMBER()直接使用することはできません-たとえば、そのためにCTE(Common Table Expression)を使用する必要があります:

;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少なくとも 1 つ必要です。ORDER BY

あなたの質問から、 を決定するためにどの基準 (列) で注文するかROW_NUMBER()が明確ではありませんUPDATE

于 2011-04-16T11:59:09.290 に答える
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
于 2011-04-16T12:25:07.577 に答える
0

重複を削除するには ;WITH CTE(Name,Address1,Phone,RN) AS ( SELECT Name,Address1,Phone, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Name) AS RN ) DELETE FROM CTE WHERE RN > 1

于 2015-12-03T17:48:01.670 に答える