使用DENSE_RANK排除空值

Tha*_*Guy 4 sql sql-server rank dense-rank

Dense_Rank正在考虑所有因素.有没有办法排除空值,所以1之后的下一个排名将是2而不是3.

这就是现在的表格:

 A     | DENSE_R 
 --------------
 1     | 1  
 --------------
 2     | null  
 --------------
 3     | 3 
 --------------
 4     |  4    
Run Code Online (Sandbox Code Playgroud)

这就是我希望表格看起来像:

 A     | DENSE_R 
 --------------
 1     | 1  
 --------------
 2     | null  
 --------------
 3     | 2 
 --------------
 4     |  3  
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码: -

WITH CTE AS
(
 SELECT A 
 FROM A1
)
SELECT A,
CASE 
  WHEN  **Condition**
  THEN DENSE_RANK() OVER (Order by [A] ASC)
END
AS 'DENSE_R'
FROM CTE
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

你可以case像这样使用:

select A,
       (case when A is not null
             then dense_rank() over (partition by (case when A is not null then 1 else 0 end)
                                     order by a desc
                                    )
        end) as dr
from A1;
Run Code Online (Sandbox Code Playgroud)


Gri*_*rim 5

使用partition by**Condition**您已使用的相同.

WITH CTE AS
(
 SELECT A 
 FROM A1
)
SELECT A,
CASE 
  WHEN  **Condition**
  THEN DENSE_RANK() OVER (Partition by (case when **Condition** then 1 else 0 end) Order by [A] ASC)
END
AS 'DENSE_R'
FROM CTE
Run Code Online (Sandbox Code Playgroud)