更新表的操作,见图解决办法

更新表的操作,见图
按card字段由小到大的顺序,更新no1字段,为序号列,即从1,2,3,4..........N递增,请问如何写语句?更新表的操作,见图解决办法
------解决思路----------------------
UPDATE table1
   SET no1 = rn
  FROM table1,
       (SELECT id,
               ROW_NUMBER() OVER(ORDER BY card desc) RN
          FROM table1
        ) t
 WHERE table1.id = t.id

必须要有id或主键才能一对一更新,否则相同card之间会混乱的。

------解决思路----------------------
引用:
UPDATE table1
   SET no1 = rn
  FROM table1,
       (SELECT id,
               ROW_NUMBER() OVER(ORDER BY card desc) RN
          FROM table1
        ) t
 WHERE table1.id = t.id

必须要有id或主键才能一对一更新,否则相同card之间会混乱的。

+1, 可以再添加列rq,sktime的排序.

UPDATE table1
   SET no1 = rn
  FROM table1,
       (SELECT id,
               ROW_NUMBER() OVER(ORDER BY card, rq, sktime) RN
          FROM table1
        ) t
 WHERE table1.id = t.id and table1.rq =t.rq and table1.sktime = t.sktime

------解决思路----------------------

with cet as (
select Card,No1,ROW_NUMBER()over(order by card)ID from tabname
)
update cet
set No1=ID