Sql-Server

僅更新前 1 行

  • December 8, 2016

我有一張表,我只需要更新每個員工的 1 個欄位。下面是範例 ddl 和我想要的輸出,應該如何編寫更新查詢以僅更新前 1 行?

Declare @Table1 Table (empName varchar(100), fieldtoupdate varchar(10))

Insert Into @Table1 (empName) VALUES ('Blue'), ('Blue'), ('Blue'), 
('Blue'), ('Blue'), ('Blue'), ('Red'), ('Red'), ('Red'), ('Red'), 
('Green'), ('Green'), ('Green')

Select * from @Table1

empName fieldtoupdate
Blue    Top 1
Blue    
Blue    
Blue    
Blue    
Blue    
Red     Top 1
Red 
Red 
Red 
Green   Top 1
Green   
Green   

我將在這裡使用 CTE 為您的表數據提供行號(由 empName 分區)。這樣您就可以更新 cte,這具有實際更新基表的優勢。

請記住,由於您沒有排序列,因此無法保證實際更新哪一行(您可能需要更多限制性的排序條件),但是對於基本範例,您可以使用以下內容。

DECLARE @Table1 TABLE
   (
     empName VARCHAR(100) ,
     fieldtoupdate VARCHAR(10)
   );

INSERT  INTO @Table1
       ( empName )
VALUES  ( 'Blue' ),
       ( 'Blue' ),
       ( 'Blue' ),
       ( 'Blue' ),
       ( 'Blue' ),
       ( 'Blue' ),
       ( 'Red' ),
       ( 'Red' ),
       ( 'Red' ),
       ( 'Red' ),
       ( 'Green' ),
       ( 'Green' ),
       ( 'Green' );
WITH    cteTop1Table ( RowNum, empName, fieldtoupdate )
         AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY empName ORDER BY empName ) AS RowNum ,
                       empName ,
                       fieldtoupdate
              FROM     @Table1
            )
   UPDATE  cteTop1Table
   SET     fieldtoupdate = 'Top 1'
   WHERE   RowNum = 1;

SELECT  *
FROM    @Table1;


empName fieldtoupdate
Blue    Top 1
Blue    NULL
Blue    NULL
Blue    NULL
Blue    NULL
Blue    NULL
Red     Top 1
Red     NULL
Red     NULL
Red     NULL
Green   Top 1
Green   NULL
Green   NULL

引用自:https://dba.stackexchange.com/questions/157580