如何为SQL分区生成连续排名?现有查询结果不符预期
实现分区内连续排名的SQL解决方案
核心修改方案
若你需要在每个PayloadHeaderId分区内生成严格连续且唯一的排名(即使PayloadLineItemId存在重复值,每行也对应唯一的连续序号),只需将原查询中的DENSE_RANK()替换为ROW_NUMBER()即可:
;with partitionedGroup as ( SELECT ROW_NUMBER() OVER (PARTITION BY PayloadHeaderId ORDER BY PayloadLineItemId ASC) as rowRank, * FROM PayloadLineItems WHERE Synced = 0 ) select TOP 50 * FROM partitionedGroup
函数差异说明
ROW_NUMBER():在指定分区内,为每行分配唯一的连续整数排名,不受排序字段重复值影响,排名绝对连续且不重复。DENSE_RANK():当排序字段存在重复值时,重复值会获得相同排名,后续排名不会跳号(例如:1,1,2,3),本身也属于连续排名的范畴。若你的需求是让相同PayloadLineItemId的行共享同一排名,原查询已满足要求。
内容的提问来源于stack exchange,提问作者monstertjie_za
相关产品推荐
相关产品推荐

