SQL Rank()函数排除行

Dot*_*ner 1 sql sql-server window-functions

考虑我有下表.

ID  value
1   100
2   200
3   200
5   250
6   1
Run Code Online (Sandbox Code Playgroud)

我有以下查询,给出如下结果.我想从rank函数中排除值200,但仍然必须返回该行.

SELECT
CASE WHEN Value = 200 THEN 0
     ELSE DENSE_RANK() OVER ( ORDER BY VALUE DESC)
END AS RANK,
ID,
VALUE
FROM @table

RANK   ID   VALUE
1       5   250
0       2   200
0       3   200
4       1   100
5       6   1
Run Code Online (Sandbox Code Playgroud)

但我希望结果如下.怎么实现呢?

RANK   ID   VALUE
1       5   250
0       2   200
0       3   200
2       1   100
3       6   1
Run Code Online (Sandbox Code Playgroud)

Ser*_*erg 6

如果VAL列不可为空,则考虑NULL是最后一个值 ORDER BY .. DESC

select  *, dense_rank() over (order by nullif(val,200) desc) * case val when 200 then 0 else 1 end
from myTable
order by val desc;
Run Code Online (Sandbox Code Playgroud)