【发布时间】:2020-02-17 05:17:51
【问题描述】:
我有一个查询,其中包含 DENSE_RANK 和 ROW_NUMBER 列:
WITH CTE AS(
SELECT
A.SL_NO,
A.ACC_NO,
A.ACC_NAME
DENSE_RANK() OVER(ORDER BY A.ACC_NO, A.ACC_NAME) DRN,
ROW_NUMBER() OVER(PARTITION BY A.ACC_NO, A.ACC_NAME ORDER BY A.SL_NO) RN
FROM TEST_TBL A
)
SELECT *
FROM CTE A
ORDER BY A.SL_NO;
查询结果:
SL_NO ACC_NO ACC_NAME DRN RN
1 234 UNIP 3 1
2 234 UNIP 3 2
3 234 UNIP 3 3
4 256 PURP 4 1
5 256 PURP 4 2
6 289 KFAR 5 1
7 210 FHAS 2 1
8 210 FHAS 2 2
9 210 FHAS 2 3
10 110 PURP 1 1
11 110 PURP 1 2
12 110 PURP 1 3
13 110 PURP 1 4
但是想要这样排序 DRN 列(排名必须根据 acc_no 和 acc_name 列):
SL_NO ACC_NO ACC_NAME DRN RN
1 234 UNIP 1 1
2 234 UNIP 1 2
3 234 UNIP 1 3
4 256 PURP 2 1
5 256 PURP 2 2
6 289 KFAR 3 1
7 210 FHAS 4 1
8 210 FHAS 4 2
9 210 FHAS 4 3
10 110 PURP 5 1
11 110 PURP 5 2
12 110 PURP 5 3
13 110 PURP 5 4
需要建议以使用或不使用 DENSE_RANK 来实现它。提前致谢。
【问题讨论】: