关于SQL中的分区的两部分问题。
在T-SQL中,当你使用PARTITION BY时,有没有办法为每个分区分配一个唯一的编号,除了像row_number()这样的东西?
E.g。 row_number()会产生,
Action Timestamp RowNum
A '2013-1-10' 1
A '2013-1-11' 2
B '2013-1-12' 1
B '2013-1-13' 2
然而,此外,唯一标识每个分区可以产生,
Action Timestamp RowNum PartitionNum
A '2013-1-10' 1 1
A '2013-1-11' 2 1
B '2013-1-12' 1 2
B '2013-1-13' 2 2
然后可以使用GROUP BY分区号。
我的问题的第二部分是,你如何打破每个分区并迭代它,例如,
for each partition p
for each row r in p
do F(r)
T-SQL中的任何方式?
答案 0 :(得分:2)
您可以使用dense_rank()
:
select *
, row_number() over (partition by Action order by Timestamp) as RowNum
, dense_rank() over (order by Action) as PartitionNum
from YourTable
T-SQL不擅长迭代,但如果你真的需要,请查看cursors。