首页 > 解决方案 > 使用 ROW_NUMBER() 对数据集进行分区

问题描述

我对ROW_NUMBER()在 SQL 中使用有点困惑。

有一个当前看起来如下的数据集:

 Number ID
    1   1
    2   6
    3   11

我在下面写了一个查询:

SELECT rownum = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Number), Number
FROM #SEQNUMBERSTEMP

这给出了输出:

rownum  Number
1       1
1       2
1       3
1       4
1       5
1       6
1       1
1       2
1       3
1       4
1       1

但我想实现以下目标:

rownum  Number
1       1
1       2
1       3
1       4
1       5
2       1    # Note 2 should start at position 6
2       2
2       3
2       4
2       5
3       1    # Note 3 should start at position 11
3       2
3       3

标签: sqlsql-serverdatabasetsqlwindow-functions

解决方案


您可能希望DENSE_RANK()不使用PARTITION BY子句,例如:

SELECT rownum = DENSE_RANK() OVER (ORDER BY Number), Number
FROM #SEQNUMBERSTEMP

推荐阅读