Как назначить 1 уникальный номер для строк, содержащих одинаковое значение - PullRequest
0 голосов
/ 21 мая 2018

Благодарим вас за помощь в деле, над которым я работаю Oracle (pl / sql).

Предположим, у меня есть 1 таблица с именем TableA: TableA

Правило сортировки TableA таково:

  1. CASE_ID & CONTRACT с 'SD' TRIGGER должны располагаться сверху, независимо от SCORE.
  2. После того, как все CONTRACT & CASE_ID с 'SD' TRIGGER размещены сверху, следующий CASE_ID & CONTRACT отсортированы по убыванию SCORE.

Я хочу разместить 1 уникальный номер для 1 CASE_ID, начиная с 1, поэтому КОНТРАКТ с тем же CASE_ID будет иметь тот же номер.Пример решения, которое я пытаюсь получить: Пример решения

Я пытался использовать DENSE_RANK со следующим запросом:

select a.*
      ,dense_rank() over (partition by a.case_id order by rn) 
  from (
        select a.*,rownum as rn from TableA a
       )a

Норешение по-прежнему не так, как я хочу, есть некоторые CASE_ID, назначенные с тем же НОМЕРОМ

Благодарю, если вы можете дать мне какой-то вклад в этом отношении.

Спасибо большоемного!

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете использовать dense_rank().Это выглядит так:

select a.*,
       dense_rank() over (order by a.case_id) 
from TableA a;

Нет partition by необходимо.

0 голосов
/ 21 мая 2018

Плотный ранг с разделом просто даст вам последовательные ранги в разделе.Чтобы использовать diff_rank без разбиения, см. ответ Гордона .

Еще один способ - создать row_number для отдельного case_id и вернуться к исходной таблице;

SELECT TableA.* , bar.NUMBER
FROM TableA
JOIN 
(SELECT foo.CASE_ID as case_id, ROW_NUMBER() OVER (Partition by 1) as NUMBER
FROM ((SELECT DISTINCT CASE_ID FROM TableA)as foo) as bar
ON TableA.CASE_ID = bar.case_id ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...