如何在SQL查询中正确使用ROW_NUMBER函数生成所需序号列
问题原因
你当前的查询逻辑错误点为PARTITION BY选择的字段不符合需求:
PARTITION BY DetailId会将所有相同DetailId的行划分为独立分组,ROW_NUMBER()会在每个分组内部单独从1开始计数,最终几乎所有行的RowNum都会返回1,和预期结果不符。
调整后的查询语句
你需要按Masterid进行分组,同一个Masterid下的记录按DetailId排序后生成序号,调整后语句如下:
SELECT ROW_NUMBER() OVER(PARTITION BY Masterid ORDER BY DetailId) AS RowNum, Masterid, DetailId FROM #DATA
逻辑说明
PARTITION BY Masterid会将相同Masterid的行归类到同一个分组- 同一分组内按
DetailId升序排序,依次生成从1开始的连续行号,即可得到你需要的输出结果。
内容的提问来源于stack exchange,提问作者jaymin
相关产品推荐
相关产品推荐

