在SQL Server DB中,我有一个我感兴趣的值表。
当我对(ORDER BY VALUE DESC) as RANK执行RANK()时,我得到以下结果(在假设表中):
RANK | USER_ID | VALUE
------------------------
1 | 33 | 30000
2 | 10 | 20000
3 | 45 | 10000
4 | 12 | 5000
5 | 43 | 2000
6 | 32 | NULL
6 | 13 | NULL
6 | 19 | NULL
6 | 28 | NULL问题是,我不希望值为NULL的行获得排名-我需要某种方法将这些行的排名设置为NULL。到目前为止,在网上搜索还没有给我带来关于我如何能够做到这一点的答案。
感谢您能提供的任何帮助。
发布于 2010-09-09 21:20:53
您可以尝试使用CASE语句:
SELECT
CASE WHEN Value IS NULL THEN NULL
ELSE RANK() OVER (ORDER BY VALUE DESC)
END AS RANK,
USER_ID,
VALUE
FROM yourtable发布于 2014-10-31 13:33:47
如果排序依据是升序而不是降序,则前面提供的CASE语句将对排名中的空记录进行计数。这将使排名从5开始,而不是1--这可能不是我们想要的。
为了确保空值不会计入排名中,您可以通过添加关于值是否为空的初始排序条件来强制它们到底部,如下所示:
SELECT
CASE WHEN Value IS NULL THEN NULL
ELSE RANK() OVER
(ORDER BY CASE WHEN Value IS NULL THEN 1 ELSE 0 END, VALUE DESC)
END AS RANK,
USER_ID,
VALUE
FROM yourtablehttps://stackoverflow.com/questions/3676875
复制相似问题