Sql 如何根据同一表中另一列的顺序更新列基中的所有值?

Sql 如何根据同一表中另一列的顺序更新列基中的所有值?,sql,database,oracle,sql-update,sequence,Sql,Database,Oracle,Sql Update,Sequence,说我在Oracle数据库中有这样一个表 S_Name S_NO S_SID Michael (NULL) C40 Jay (NULL) A44 David (NULL) G71 Chris (NULL) Y53 ... ... ... 我想根据已排序的S_SID更新所有S_NO base。 平均值A44>C40>G71>Y53 S_Name S_NO S_SID Michael 2 C40 Jay

说我在Oracle数据库中有这样一个表

S_Name    S_NO   S_SID
Michael   (NULL)  C40
Jay       (NULL)  A44
David     (NULL)  G71
Chris     (NULL)  Y53
...       ...     ...
我想根据已排序的S_SID更新所有S_NO base。 平均值A44>C40>G71>Y53

S_Name    S_NO   S_SID
Michael   2       C40
Jay       1       A44
David     3       G71
Chris     4       Y53
...       ...     ...

您可以使用ROW_NUMBER获取订单,以便选择以下选项

 SELECT S_name, S_SID, ROW_NUMBER() OVER (ORDER BY S_SID DESC) as RN
给你一个值,把它放在更新中

更新

此代码

UPDATE TABLE SET S_NO = (SELECT ROW_NUMBER() OVER(ORDER BY S_NO) AS RN FROM TABLE)
不连接回表,因此服务器假定您只想从子查询中获取一个值,并将其分配给所有行

您需要加入索引:

UPDATE TABLE AS MAIN_TABLE
  SET MAIN_TABLE.S_NO = (SELECT ROW_NUMBER() OVER(ORDER BY S_NO) AS RN 
              FROM TABLE AS SUB_TABLE
              WHERE MAIN_TABLE.INDEX_COLUMN = SUB_TABLE.INDEX_COLUMN
              )

从S_Sidu的订单上使用行数更新您确定这不是更好的即时计算吗?在任何插入/更新之后是否不需要更新此项?表中所有行的S_SID是否始终唯一?它用于“初始”设置。之后,不需要更新,但需要使用“maxS_NO+1”进行插入。SID在表中是唯一的。为什么描述?提供的示例似乎是升序的。UPDATE TABLE SET S_NO=选择按S_NO排序的行数OVERORDER BY S_NO AS RN FROM TABLE但它返回单行子查询返回多行如何在单个查询中更新所有行?谢谢