更新sql表中的特定行

spl*_*ogo 3 sql t-sql sql-server sql-server-2005

我有以下SELECT语句.

SELECT     AETID, DSRID, FYEID, BASICRATE, EURORATE, 
  COMID, BRAID, CURID, CURIDCONV, ENTRYDATE, EVNUMBER, 
  ORIGIN, IEEID, RELDOCNUM, GJOID, JOURNALNUM,
  JUSTIFICATION, KEPYOAMOUNT, KEPYONUM, STATUS, 
  UPDSTATUS, TOTALCB, IDLINKED, CREUSERID, CREUSERDATE, 
  UPDUSERID, UPDUSERDATE, ACEIDCROSSENTRY, ACEIDCROSSEDENTRY, 
  ISCROSS, ISCROSSED, ACEIDCANCEL, ACEIDPRIMARY, CCEID
FROM         EliteUser.ACE
WHERE     (JOURNALNUM > 1193) 
  AND (JOURNALNUM < 2387)
Run Code Online (Sandbox Code Playgroud)

我想要做的是更新特定的行,以便journalnum = 1194更新为1,journalnum = 1195更新为2等

Tob*_*sey 7

哪一列是新值?假设您要更新JournalNum列,使其从1开始:

UPDATE
    EliteUser.ACE
SET
    JournalNum = JournalNum - 1193
WHERE
    JournalNum > 1193
AND JournalNum < 2387
Run Code Online (Sandbox Code Playgroud)


Mah*_*mal 4

UPDATE EliteUser.ACE
SET journalnum = journalnum - 1193
WHERE  JOURNALNUM > 1194 
   AND JOURNALNUM < 2387;
Run Code Online (Sandbox Code Playgroud)

或者:

UPDATE e
SET e.JOURNALNUM = t.rownum
FROM EliteUser.ACE e
INNER JOIN
(
  SELECT JOURNALNUM, ROW_NUMBER() OVER(ORDER BY JOURNALNUM ASC) rownum
  FROM EliteUser.ACE
  WHERE  JOURNALNUM > 1194 
    AND JOURNALNUM < 2387
) t ON e.JOURNALNUM = t.JOURNALNUM
Run Code Online (Sandbox Code Playgroud)