簡體   English   中英

如何在SQL Server中使用row_number更新列?

[英]How can I update a column with row_number in SQL Server?

如何在SQL Server 2008 R2中使用row_number覆蓋列?

BEGIN TRANSACTION 

DECLARE @count int 
DECLARE @maxcount int 
SET @count = 1

SET @maxcount = (SELECT count(*)
                 FROM   Applicant_Detail ad
                 WHERE  ad.identification_code = 1)
PRINT @maxcount

WHILE (@count<@maxcount)
BEGIN
    UPDATE ad
    SET    ad.NRIC_nbr = s.myRowNumber
    FROM   Applicant_Detail ad
    INNER JOIN   (
               SELECT ROW_NUMBER() OVER (ORDER BY NRIC_nbr ASC) AS myRowNumber
               FROM   Applicant_Detail ad
           )S
      ON   s.myRowNumber = @count
      SET @count = @count+1
END

該查詢需要很多時間。 我在applicant_detail表中沒有任何具有順序數據的列? 我使用計數邏輯,但是需要很多時間嗎?

我想要的是?
使用順序數據(例如1,2,3,4,5,6,7,8,9 ......)更新表的列嗎?

嘗試這個:

declare @count int = (select count(1) from Applicant_Detail)

;with cte as 
(select *, row_number() over (order by @count) rn
 from Applicant_Detail)

 update cte
 set NRIC_nbr = rn

 select * from Applicant_Detail

演示版

解決這個問題

BEGIN TRANSACTION 
;WITH numbering AS 
( SELECT AD.NRIC_nbr,
         AD.application_number,
         ROW_NUMBER() OVER(ORDER BY AD.application_number) AS ROWNUMBER 
  FROM   Applicant_Detail ad WHERE AD.identification_code=1
)
UPDATE numbering 
SET NRIC_nbr=ROWNUMBER

當您想使用row_numebr更新列時。 這是完美的解決方案

使用TEMP AS(將SELECT ID作為rid,將ROW_NUMBER()覆蓋(按ORDER BY [ID] ASC)作為RN FROM ORG)更新ORG設置columnname1 ='200'+(選擇RN FROM TEMP,其中TEMP.rid = ORG.id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM