Selezionare N Row in Oracle
-
09-10-2019 - |
Domanda
Si supponga che stiamo avendo i seguenti dati:
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
Voglio selezionare distinto Chiavi ordinato dal Valore DISC per essere visualizzato in una griglia che supporti l'impaginazione.
Non so come generare rango come i valori visualizzati in colonna Classifica desiderata ??strong>. In modo che posso impaginare correttamente il set di dati
Quando ho provato ad usare: DENSE_RANK () OVER (ORDER BY valore), il risultato è stato
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
Quando provo a selezionare i primi due tasti “rango tra 1 e 2” Mi riceve di nuovo 3 tasti. E questo resti il ??meccanismo di paginazione richiesta.
Tutte le idee?
Grazie
Soluzione
Se si desidera che le chiavi e valori distinti, perché non utilizzare distinte?
select distinct
t.Key,
t.Value
from
YourTable t
order by
t.value
Ti actualle bisogno di rango?
Se lo fai, è ancora possibile
select distinct
t.Key,
t.Value,
dense_rank() over () order by (t.Value, t.Key) as Rank
from
YourTable t
order by
t.value
Questo lavoro whould senza il distinto pure.
Altri suggerimenti
'Quando provo a selezionare i primi due chiavi “rango tra 1 e 2” Ricevo indietro 3 chiavi. '
Questo è dovuto al fatto che si sta ordinando solo per valore, in modo da tutte le chiavi con lo stesso valore viene assegnato lo stesso valore. Quindi è necessario includere il KEY nella clausola ordinazione. In questo modo:
DENSE_RANK() OVER (ORDER BY key ASC, value DESC)