Выберите N Строка в Oracle - PullRequest
       44

Выберите N Строка в Oracle

1 голос
/ 12 декабря 2010

Предположим, у нас есть следующие данные:

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

Я хочу выбрать Distinct Ключи , упорядоченные по Значение DESC для отображения в сетке, которая поддерживаетнумерация страниц.

Я не знаю, как создать ранг, как значения отображаются в Столбец требуемого ранга .Чтобы я мог правильно разбить на страницы набор данных

Когда я пытался использовать: DENSE_RANK () OVER (значение ORDER BY), результат был

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 ключа.И это разрушает необходимый механизм нумерации страниц.

Есть идеи?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 декабря 2010

'Когда я пытаюсь выбрать первые два ключи «ранг между 1 и 2» я получаю назад 3 клавиши. '

Это потому, что вы упорядочиваете только по VALUE, поэтому всем КЛЮЧАМ с одинаковым значением присваивается одинаковый ранг. Таким образом, вам нужно включить ключ в разделе заказа. Как это:

DENSE_RANK() OVER (ORDER BY key ASC, value DESC)  
1 голос
/ 12 декабря 2010

Если вам нужны разные ключи и значения, почему бы не использовать разные?

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

Это могло бы работать и без отчетливого.

...