как отдать приоритет определенной записи в оракуле? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть таблица:

id     name    location
1      aaa     home
1      aaa     village
1      aaa     office
2      bbb     village
2      bbb     office
3      ccc     home
3      ccc     office

Когда я пишу запрос, я должен получить одну запись для каждого имеющий приоритет дома> офис> деревня

Выход:

1 aaa home
2 bbb office
3 ccc home 

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Или вы можете использовать группу:

SELECT 
   t.id, 
   t.name, 
   min( t.location ) keep (dense_rank first order by CASE location
                                                     WHEN 'home' THEN  1
                                                     WHEN 'office' THEN 2
                                                     WHEN 'village' THEN 3
                                                     ELSE  4
                                                     END
                            ) as location
FROM your_table t
GROUP BY 
   t.id, 
   t.name;
0 голосов
/ 30 августа 2018

Вы можете использовать row_number(), чтобы назначить каждой строке номер в заданном порядке для каждого идентификатора. Используйте CASE для определения порядка по местоположению.

SELECT x.id,
       x.name,
       x.location
       FROM (SELECT t.id,
                    t.name,
                    t.location,
                    row_number() OVER (PARTITION BY t.id
                                       ORDER BY CASE location
                                                  WHEN 'home' THEN
                                                    1
                                                  WHEN 'office' THEN
                                                    2
                                                  WHEN 'village' THEN
                                                    3
                                                  ELSE
                                                    4
                                                END)
                    FROM elbat) x
       WHERE x.rn = 1;

Примечание. Если местоположения точно соответствуют заданным трем, CASE не требуется, поскольку они, по совпадению, уже имеют требуемый порядок при лексикографической сортировке. Но я предполагаю, что это был только пример, и совпадение может не быть дано в реальных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...