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
Run Code Online (Sandbox Code Playgroud)
在需要对多个列进行排名的查询中,如何排除 NULL 值对 PERCENT_RANK 的影响?
SQL Server 2012PERCENT_RANK()将 NULL 视为分布中的实际值。如果要对一列进行排名,您可以简单地添加一个 where 子句(即where Cole_Crops IS NOT NULL)。
小智 5
这是一个简单的修复方法,在分区子句中使用 case 语句。
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
Run Code Online (Sandbox Code Playgroud)
这将分别对空值和非空值进行排名,但包装 case 语句会将空值显示为空值。
问题解决了!
| 归档时间: |
|
| 查看次数: |
3754 次 |
| 最近记录: |