SQL Server 2008 R2:DENSE_RANK()有两列

MAK*_*MAK 1 sql sql-server sql-server-2008-r2

我有以下数据:

表:

CREATE TABLE tbl1
(
    cola varchar(20),
    colb int
);  

INSERT INTO tbl1 VALUES('AB10029',1),('5023154',17),('05021286',17),('10029',32),('05023154',17),('5021286',17);    
Run Code Online (Sandbox Code Playgroud)

鉴于记录:

Cola        Colb    
------------------
AB10029     1   
5023154     17  
05021286    17  
10029       32  
05023154    17  
5021286     17  
Run Code Online (Sandbox Code Playgroud)

注意:我想给非可匹配组合的等级为1(最后一个字符应该相同),colb和匹配组合应该是1,2,3等等.

预期产量:

Cola        Colb    Rn
-----------------------
AB10029     1       1
10029       32      1
5023154     17      1
05023154    17      2
5021286     17      1
05021286    17      2
Run Code Online (Sandbox Code Playgroud)

我的尝试:

SELECT Cola,Colb,
   DENSE_RANK() OVER(PARTITION BY Colb ORDER BY RIGHT(Cola,5)) rn
FROm tbl1
ORDER BY RIGHT(Cola,5)  
Run Code Online (Sandbox Code Playgroud)

Ser*_*lan 5

你可以使用它

SELECT Cola,Colb,
   ROW_NUMBER() OVER(PARTITION BY Colb,RIGHT(Cola,5) ORDER BY RIGHT(Cola,5)) rn
FROm tbl1
order by RIGHT(Cola,5),rn
Run Code Online (Sandbox Code Playgroud)

结果:

Cola                 Colb        rn
-------------------- ----------- --------------------
AB10029              1           1
10029                32          1
05021286             17          1
5021286              17          2
05023154             17          1
5023154              17          2
Run Code Online (Sandbox Code Playgroud)