2012-01-18 55 views

回答

4
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 
+0

只是想添加一个需要注意的是书面的结果是不 - 确定性的,即在每个名称中,不能保证从一次执行到下一次执行相同的行将被分配1,2,3。为了确定性,在分析窗口中添加一个ORDER BY'子句;该问题没有包含足够的信息来建议适当的排序。 – 2012-01-18 13:27:28

+0

是的,谢谢你戴夫科斯塔太多,我编辑的代码与人的分区后的人,但直到弗洛林Ghita不会接受此代码更改,没有人可以看到这个改进的代码... – user963601 2012-01-18 13:36:42

+0

@ user963601 - 我投了弃权你的编辑。由PEOPLE排序不会有任何区别,因为该子句指定分区*内的排序顺序*。由于分区是PEOPLE,查询仍然是非确定性的。您需要的是一种排序顺序,这种排序方式对于为PEOPLE的相同值记录优先级的方式而言是有意义的。诸如DATE_CREATED之类的列将适合账单,以便记录按照最早或最近的顺序排列。 – APC 2012-01-18 13:47:40