Выберите ряд в Oracle
-
09-10-2019 - |
Вопрос
Предположим, у нас есть следующие данные:
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. быть отображенным в сетке, которая поддерживает пагинацию.
Я не знаю, как генерировать ранг как значения, отображаемые в Желаемый рейтинговый столбец. Отказ Так что я могу правильно пагировать над набором данных
Когда я пытался использовать: deste_rank () over (порядок по значению), результат был
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», я получаю обратно 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
Эта работа не работает без разных.
Другие советы
«Когда я пытаюсь выбрать первые две клавиши« ранг от 1 до 2 », я получаю обратно 3 ключей.
Это связано с тем, что вы заказываете только по значению, поэтому все клавиши с одинаковым значением присваиваются одинаковым рангом. Таким образом, вам необходимо включить ключ в пункте заказа. Так:
DENSE_RANK() OVER (ORDER BY key ASC, value DESC)