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