1
問題:我需要使用select語句獲取X列的值,例如:如何在oracle中爲不同名稱的每行獲取序列?
人物| X
--------------
name1 | 1
name1 | 2
name1 | 3
name2 | 1
name2 | 2
name3 | 1
....
人們無限計數。
問題:我需要使用select語句獲取X列的值,例如:如何在oracle中爲不同名稱的每行獲取序列?
人物| X
--------------
name1 | 1
name1 | 2
name1 | 3
name2 | 1
name2 | 2
name3 | 1
....
人們無限計數。
select
people,
row_number() over(partition by people) as x
from yourtable
更新:小反饋意見總結: 戴維科斯塔和APC說,結果是不確定的。也就是說,如果你運行這個查詢tomorow,有可能在某些情況下第一個name1得到id 2。但是,查詢仍然是正確的。 如果您的表有像DateInserted,出生日期或其他屬性,可以使相同的名稱之間的區別,可以改善這種例如查詢:
select
people,
row_number() over(partition by people order by DateOfBirth) as x
from yourtable
只是想添加一個需要注意的是書面的結果是不 - 確定性的,即在每個名稱中,不能保證從一次執行到下一次執行相同的行將被分配1,2,3。爲了確定性,在分析窗口中添加一個ORDER BY'子句;該問題沒有包含足夠的信息來建議適當的排序。 – 2012-01-18 13:27:28
是的,謝謝你戴夫科斯塔太多,我編輯的代碼與人的分區後的人,但直到弗洛林Ghita不會接受此代碼更改,沒有人可以看到這個改進的代碼... – user963601 2012-01-18 13:36:42
@ user963601 - 我投了棄權你的編輯。由PEOPLE排序不會有任何區別,因爲該子句指定分區*內的排序順序*。由於分區是PEOPLE,查詢仍然是非確定性的。您需要的是一種排序順序,這種排序方式對於爲PEOPLE的相同值記錄優先級的方式而言是有意義的。諸如DATE_CREATED之類的列將適合賬單,以便記錄按照最早或最近的順序排列。 – APC 2012-01-18 13:47:40