質問

次のデータがあるとします。

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

独特を選択したい キー によって順序付け Value DESC ページネーションをサポートするグリッドに表示されます。

に表示される値としてランクを生成する方法がわかりません 目的のランク列. 。データセットを介して正しくページングできるように

私が使用しようとしたとき:dense_rank()over(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

最初の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

これは、明確なものなしでも機能するでしょう。

他のヒント

「最初の2つのキー「ランク1〜2」を選択しようとすると、3つのキーを受け取ります。」

それは、あなたが価値だけで注文しているため、同じ値のすべてのキーに同じランクが割り当てられているためです。したがって、注文条項にキーを含める必要があります。このような:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top