Как получить отдельные строки на основе выбранных столбцов вместо всех столбцов таблицы в Oracle - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь получить первые 3 разных столбца, в то время как последний столбец может иметь любое значение.Если я различаю по всем столбцам, это дает мне 8 строк.Эта таблица является динамической, поэтому мне понадобятся отдельные 3 столбца и любое значение в последнем столбце.

У меня есть следующий scenerio,

Name       Surname   Road           Pet
John       Trav     John_road       dog
Kaley      Couco    Couco_road     horse
Charlie    Sheen    Sheen_road     rabbit 
Johnny     Galecki  Galecki_road    cat 
John       Trav     John_road      donkie
Kaley      Couco    Couco_road      mouse
Charlie    Sheen    Sheen_road      goat
Johnny     Galecki  Galecki_road    pig

Желаемый результат:

Name       Surname   Road           Pet
John       Trav     John_road       dog
Kaley      Couco    Couco_road     mouse
Charlie    Sheen    Sheen_road     rabbit 
Johnny     Galecki  Galecki_road    cat 

Я пробовал решение по этой ссылке, но оно не работает:

Oracle 11g SQL для получения уникальных значений в одном столбце многостолбцового запроса

Пожалуйста, помогите в Oracle

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Так как значение последнего столбца вас не волнует, простой способ - агрегировать его как

select name, surname, road, max(pet) 
from your_table
group by name, surname, road
0 голосов
/ 13 февраля 2019

Вы пробовали это

SELECT NAME, SURNAME, rOAD, PET FROM 
(
SELECT NAME, SURNAME, rOAD, PET, ROW_NUMBER () OVER (PARTITION BY NAME, SURNAME, rOAD ORDER BY PET) RN FROM FROM TABLE_NAME
) WHERE RN=1
0 голосов
/ 13 февраля 2019

Используйте row_number() с partition by первыми тремя столбцами:

Демо-версия dbfiddle

select * 
  from (
    select t.*, 
           row_number() over (partition by Name, Surname, Road order by pet) rn 
      from t)
  where rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...