Question

Supposons que nous ayons les données suivantes:

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

Je veux sélectionner Distinct Touches ordonnée par Valeur DESC pour afficher dans une grille de pagination des supports.

Je ne sais pas comment générer rang que les valeurs affichées dans souhaité colonne Rang . Alors que je peux paginer correctement sur l'ensemble de données

Quand j'ai essayé d'utiliser: DENSE_RANK () OVER (ORDER BY valeur), le résultat a été

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

Lorsque je tente de sélectionner les deux premières touches « rang entre 1 et 2 » Je reçois dos 3 clés. Et ce ruines du mécanisme de pagination nécessaire.

Toutes les idées?

Merci

Était-ce utile?

La solution

Si vous voulez que les clés et les valeurs distinctes, pourquoi ne pas utiliser distinctes?

select distinct
  t.Key,
  t.Value
from
  YourTable t
order by
  t.value

Avez-vous besoin actualle rang?

Si vous le faites, vous pouvez toujours

select distinct
  t.Key,
  t.Value,
  dense_rank() over () order by (t.Value, t.Key) as Rank
from
  YourTable t
order by
  t.value

Ce travail whould sans distinct ainsi.

Autres conseils

  

'Lorsque je tente de sélectionner les deux premiers   clés « rang entre 1 et 2 » Je reçois   retour 3 clés.

C'est parce que vous commandez juste en valeur, de sorte que toutes les touches avec la même valeur se voient attribuer le même rang. Donc, vous devez inclure la clé dans la clause de commande. Comme ceci:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top