1

假设我们有以下数据:

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 column中显示的值。这样我就可以在数据集上正确分页

当我尝试使用:DENSE_RANK() OVER(ORDER BY value),结果是

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 个键。这破坏了所需的分页机制。

有任何想法吗?

谢谢

4

2 回答 2

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

这在没有不同的情况下也可以工作。

于 2010-12-12T10:50:49.290 回答
1

“当我尝试选择前两个键“排名在 1 和 2 之间”时,我收到了 3 个键。

那是因为您仅按 VALUE 排序,因此具有相同值的所有 KEYS 都分配了相同的等级。所以你需要在 ordering 子句中包含 KEY 。像这样:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  
于 2010-12-12T11:38:01.217 回答