假设我们有以下数据:

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 在支持分页的网格中显示。

我不知道如何在显示的值中生成等级 所需的等级列. 。这样我就可以在数据集上正确划分

当我尝试使用:dense_rank()over(按值订单),结果是

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

有任何想法吗?

谢谢

有帮助吗?

解决方案

如果您想要独特的钥匙和值,为什么不使用不同的键呢?

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到2之间”时,我会收到3个键。

那是因为您仅按值订购,因此所有具有相同值的键均分配了相同的等级。因此,您需要在订购条款中包含密钥。像这样:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top