質問
次のデータがあるとします。
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)
所属していません StackOverflow