0

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

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

4

1 回答 1

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

于 2013-09-17T16:35:26.197 回答