SQL Server 2012 PERCENT_RANK() 排除 NULL [英] SQL Server 2012 PERCENT_RANK() Exclude NULLS

查看:170
本文介绍了SQL Server 2012 PERCENT_RANK() 排除 NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

SELECT [Cole_Crops], 
       PERCENT_RANK() OVER (PARTITION BY HUC02 
                            ORDER BY [Cole_Crops]) AS Cole_Crops_PCT_RANK], 
       [Row_Crops], 
       PERCENT_RANK() OVER (PARTITION BY HUC02 
                            ORDER BY [Row_Crops]) AS Row_Crops_PCT_RANK]            
FROM V012_CDLMAX_09

<小时>

如何在具有多个要排名的列的查询中排除 NULL 值影响 PERCENT_RANK?


How do you exclude NULL values from affecting the PERCENT_RANK in a query with multiple columns to be ranked?

SQL Server 2012 PERCENT_RANK() 将 NULLS 视为分布中的实际值.如果有一列要排序,您可以简单地添加一个 where 子句(即,where Cole_Crops IS NOT NULL).

SQL Server 2012 PERCENT_RANK() treats NULLS as a real value in the distribution. If there were one column to be ranked, you can simply add a where clause (i.e., where Cole_Crops IS NOT NULL).

推荐答案

这是一个简单的解决方法,在您的分区子句中使用 case 语句.

Here's an easy fix, use a case statement in your partition clause.

CASE 
    WHEN COLUMN_1 IS NULL THEN NULL 
    ELSE PERCENT_RANK() OVER 
        (PARTITION BY 
            CASE 
                WHEN COLUMN_1 IS NULL THEN 0 
                ELSE 1 
            END 
         ORDER BY COLUMN_1) 
END AS RANK_COLUMN_1

这将分别对空值和非空值进行排名,但包装 case 语句会将空值显示为空值.

This will rank nulls and non-nulls individually, but the wrapping case statement will display null values as nulls.

问题解决了!

这篇关于SQL Server 2012 PERCENT_RANK() 排除 NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆