假设我们有以下数据:
Key Value Desired Rank
--- ----- ------------
P1 0.6 2
P1 0.6 2
P1 0.6 2
P2 0.8 1
P2 0.8 1
P3 0.6 3
P3 0.6 3
我想选择值DESC 排序的不同键,以便在支持分页的网格中显示。
我不知道如何将排名生成为 Desired Rank列中显示的值。这样我就可以在数据集上正确分页
当我尝试使用:DENSE_RANK()OVER(ORDER BY值)时,结果是
Key Value DENSE_RANK() OVER(ORDER BY value)
--- ----- ------------
P1 0.6 2
P1 0.6 2
P1 0.6 2
P2 0.8 1
P2 0.8 1
P3 0.6 2
P3 0.6 2
当我尝试选择前两个键“在1和2之间排名”时,我收到了3个键。这破坏了所需的分页机制。
有什么想法吗?
由于
答案 0 :(得分:1)
如果你想要不同的键和值,为什么不使用distinct?
select distinct
t.Key,
t.Value
from
YourTable t
order by
t.value
你是否需要排名?
如果你这样做,你仍然可以
select distinct
t.Key,
t.Value,
dense_rank() over () order by (t.Value, t.Key) as Rank
from
YourTable t
order by
t.value
这样做也没有明显的区别。
答案 1 :(得分:1)
'当我尝试选择前两个 密钥“在1和2之间排名”我收到 回3键。'
这是因为您只按VALUE排序,因此具有相同值的所有KEYS都被赋予相同的排名。因此,您需要在订购子句中包含KEY。像这样:
DENSE_RANK() OVER (ORDER BY key ASC, value DESC)