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)
如果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)