2016-08-17 2 views
-1

Oracle DBにこのようなテーブルがあります。同じテーブルの別の列の順序で、列のすべての値を更新するにはどうすればよいですか?

S_Name S_NO S_SID 
Michael (NULL) C40 
Jay  (NULL) A44 
David  (NULL) G71 
Chris  (NULL) Y53 
...  ...  ... 

注文したS_SIDのすべてのS_NOベースを更新したいと思います。 iHATの平均(A44> C40> G71> Y53)

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

'UPDATEのFROM' ?挿入/更新後にこれを更新する必要はありませんか? – dnoeth

+3

あなたは、必要に応じて、これはその場で良く計算されたものではありませんよろしいを使用して

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 ) 

+0

S_SIDはテーブル内のすべての行で常に一意ですか? –

答えて

2

あなたはROW_NUMBERを使用して順序()は次のselect

SELECT S_name, S_SID, ROW_NUMBER() OVER (ORDER BY S_SID DESC) as RN 

だけのアップデートでそれを入れて、あなたに値を付けを得ることができます。


UPDATE

このコード

UPDATE TABLE SET S_NO = (SELECT ROW_NUMBER() OVER(ORDER BY S_NO) AS RN FROM TABLE) 

サーバはあなたが唯一のサブクエリから1つの値を取得していることを割り当てたいと仮定して、テーブルに戻って加入しませんすべての行に

あなたがインデックスに参加する必要があります。

`ROW_NUMBER()OVER(S_SID BY ORDER)`
+0

なぜDESCですか?提供されたサンプルは上昇しているようだった。 – mathguy

+0

UPDATE TABLE SET S_NO =(RN_FROM TABLEとしてのROW_NUMBER()のオーダー(ORDER BY S_NO)) –

+0

が返されますが、「1行のサブクエリは複数の行を返します」どのようにして1つのクエリですべてを更新できますか?ありがとう! –

関連する問題