【问题标题】:Exclude null values using DENSE_RANK使用 DENSE_RANK 排除空值
【发布时间】:2017-02-20 10:00:12
【问题描述】:

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

这就是表格现在的样子:

 A     | DENSE_R 
 --------------
 1     | 1  
 --------------
 2     | null  
 --------------
 3     | 3 
 --------------
 4     |  4    

这就是我希望表格的样子:

 A     | DENSE_R 
 --------------
 1     | 1  
 --------------
 2     | null  
 --------------
 3     | 2 
 --------------
 4     |  3  

我正在使用以下代码:-

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

【问题讨论】:

    标签: sql sql-server rank dense-rank


    【解决方案1】:

    使用 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
    

    【讨论】:

    • 我认为您需要在箱子周围多放一套( )
    • 没有。刚检查。它们不是必需的。
    • 像魅力一样工作!
    【解决方案2】:

    你可以像这样使用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;
    

    【讨论】:

    • 当A为null时,返回的数据会怎样?
    • 很抱歉我没有正确发布问题,请返回查看编辑。 A 永远不会为空,'它是导致问题的 Dense_R
    • @RossBush 什么都没有。 dr 将是 null,因为没有提到 else
    • @kage77 partition by 从这个查询将解决你的问题
    • @GriGrim 你能详细说明一下吗?划分什么?
    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2017-03-02
    • 2015-04-20
    • 2020-11-12
    • 2022-01-19
    相关资源
    最近更新 更多