2016-08-17 58 views
-1

說我在Oracle DB中有這樣一個表。如何根據同一個表中另一列的順序更新列中的所有值?

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

我想更新所有S_NO基於有序的S_SID。 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 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) 

所以服務器假設你只想從子查詢得到一個值,並將其賦值不回來加入到表到所有行。

你需要加入一個索引:

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

爲什麼選擇DESC?提供的樣本似乎是上升的。 – mathguy

+0

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

+0

但它返回「單行子查詢返回多行」如何在單個查詢中更新它們全部?謝謝! –

相關問題