row_number
列()のが1である行データを更新したいのp_id
ですが、この構文はエラーを提供しています:
update app1
set p_id = 1
where Row_Number() = 1 over(p_id)
row_number
列()のが1である行データを更新したいのp_id
ですが、この構文はエラーを提供しています:
update app1
set p_id = 1
where Row_Number() = 1 over(p_id)
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
。
これにより、その年齢の最初の従業員のみが更新されます。宝くじタイプのロジックとして使用できます
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
重複を削除するには ;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