如何重新排序数字列表?

时间:2013-09-17 16:03:08

标签: sql-server-2008 ranking row-number

我有一个生成以下输出的查询。

PART    TEST
----    ----
10      2
10      4
10      5
11      1
11      2
11      4
11      5
17      1
17      2
17      3
17      4
17      5
18      1
18      2
18      3
18      4
18      5

我正在尝试从1开始重新编号TEST。

PART    NEW_TEST    OLD_TEST
----    --------    --------
10      1           2
10      2           4
10      3           5
11      1           1
11      2           2
11      3           4
11      4           5
17      1           1
17      2           2
17      3           3
17      4           4
17      5           5

我一直在使用RANK()和ROW_NUMBER()函数,但没有得到我正在寻找的结果。

select DISTINCT
    mptc.PART,
    RANK() OVER(ORDER BY mptc.PART ASC) AS TEST,
    ROW_NUMBER() OVER(PARTITION BY mptc.PART ORDER BY tpc.TEST ASC),
    tpc.TEST
from ri.TESTS tpc
join ri.PARTS mptc
  on tpc.PART_SYSID = mptc.PART
ORDER BY mptc.PART ASC

还有其他功能可以做到这一点......我不知道吗?

由于 jlimited

1 个答案:

答案 0 :(得分:0)

我做了一些搜索并找到了答案......使用DENSE_RANK()函数。

SELECT 
    mptc.PART_SYSID,
    DENSE_RANK() OVER(PARTITION BY mptc.PART_SYSID ORDER BY tpc.TEST) AS TEST_COLLECTION_PLAN,
    ROW_NUMBER() OVER(PARTITION BY mptc.PART_SYSID,tpc.TEST ORDER BY tpc.SYSID) AS TEST_COLLECTION_ORDER
FROM ri.TESTS tpc
JOIN ri.PARTS mptc
  ON tpc.PART_TEST_SYSID = mptc.SYSID

由于 jlimited