首页 > 解决方案 > 基于 ROW_NUMBER 的分区应用相同的行 id

问题描述

我正在尝试根据 DOC 值顺序添加数字行 - 我唯一的条件是如果文档相同(如最后三行),它应该获得相同的行号。

SELECT [DOC], ROW_NUMBER()  OVER(PARTITION BY [DOC] ORDER BY [DOC])
FROM [rowset_TST]

在我得到完全相反的结果之后 - 最后三个相同的文档被编号,其余的没有:不是唯一的 ZZB 应该获得相同的行号。

ABC 1 DBS   1 DDS   1 SBC   1
SSC 1 ZZB   1 ZZB   2 ZZB   3

任何建议都非常感谢 - 请告诉我这是否可以使用 ROW_NUMBER()

问候,卢克

标签: tsqlnumbersrow

解决方案


我认为您打算在这里使用排名函数,可能是DENSE_RANK

SELECT [DOC], DENSE_RANK() OVER (ORDER BY [DOC])
FROM [rowset_TST]
ORDER BY [DOC];

假设您的样本数据相同,这将生成以下输出:

在此处输入图像描述

这是您想到的并且有意义的问题/要求的唯一解释。如果您真的希望每个文档(无论是出现一次还是多次)都具有“行号”值 1,那么我看不出使用ROW_NUMBER.


推荐阅读