1

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

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(ORDER BY 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

「ランク1から2」の最初の2つのキーを選択しようとすると、3つのキーが返されます。そして、これは必要なページネーションメカニズムを台無しにします。

何か案は?

ありがとう

4

2 に答える 2

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

これは、明確なものがなくても機能します。

于 2010-12-12T10:50:49.290 に答える
1

「最初の2つのキーを「1から2の間でランク付け」を選択しようとすると、3つのキーが返されます。」

これは、VALUEだけで注文しているため、同じ値を持つすべてのKEYに同じランクが割り当てられるためです。したがって、ordering句にKEYを含める必要があります。このような:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  
于 2010-12-12T11:38:01.217 に答える