SQL 基于多列创建密集排名

SQL create dense rank based on mulitple columns

我有一个包含两个字段的数据集,我需要为其创建密集排名。当 Field_1 不为空时 Field_2 为空,反之亦然。

Field_1 Field_2
a   
        1
        2
        3
        4
b   
        7
        8
        9
c   
        15
        20
        25

我正在努力做到这一点

Field_1 Field_2 Field_3
a               1
        1       1
        2       1
        3       1
        4       1
b               2
        7       2
        8       2
        9       2
c               3
        15      3
        20      3
        25      3

我可以通过以下行订购数据:

row_number() over (partition by null order by Field_2,Field_1) as Field_3

但这并没有给我想要的密集排名。

假设您确实有某种增量行号列(我们称之为 row_number),您可以使用窗口子句来计算填充的 field_1 值的数量:

COUNT(field_1) OVER (ORDER BY row_number ROWS UNBOUNDED PRECEDING) AS group_number

这使得每行计算 它(包括它自己)之前 field_1 的填充值的数量 row_number.

以下是有关该技术的更多详细信息: