2010-12-12 69 views
1

假设我们有以下数据:的选择N排在甲骨文

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 

我想SELECT DISTINCT由价值降序排列在支持分页网格显示。

我不知道如何生成秩为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

“我不知道如何生成等级作为Desired Rank列中显示的值。”我也没有。你说你希望他们按价值降序排列(这是第二组数据提供的)。你能举出一些例子,说明每个键(“P1”,“P2”...)具有不同的值,以及你在这些情况下期望的结果吗? – 2010-12-12 10:48:55

回答

1

如果你想在不同的键和值,为什么不使用不同?

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 

这不对子级鲜明的正常工作。

+0

谢谢,第二个例子为我工作 – Transient 2010-12-12 12:25:39

1

“当我尝试选择‘1和2之间等级’的前两个 键我接收 靠背3的键。”

这是因为您只按VALUE排序,所以具有相同值的所有KEYS都被赋予相同的等级。所以你需要在订购条款中包含KEY。像这样:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC) 
+0

谢谢,我得到了所需的结果是这样的:DENSE_RANK()OVER(ORDER BY value DESC,key ASC),以便行显示按值排序,如果相等,则键决定订单 – Transient 2010-12-12 12:23:50