2010-12-12 70 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