Фильтровать повторяющиеся столбцы в Oracle - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу видеть один и тот же pid (или идентификатор из таблицы person_info) только один раз с sql ниже. В конце концов, добавление «group by pid» будет работать в MySQL, но не в Oracle, потому что мне нужно будет иметь group by для каждого после select. Distinct здесь тоже не работает, потому что он возвращает уникальные комбинации, а не только pid. Это сводит меня с ума ... Заранее спасибо!

select pi.id                 pid,
   n.id                  nid,
   n.match_mode,
   n.match_method,
   n.match_gene_type,
   n.notification_status,
   pi.person_name,
   pi.id_card_no,
   pi.race
from notification n, person_info pi
where (n.src_data_id = pi.id or n.match_data_id = pi.id)
and n.match_mode = '1'
and n.match_gene_type = '1'
and n.notification_status = '2'
and pi.id_card_no IS NOT NULL

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Если вам все равно, какую строку вы получите, вы можете получить значение MAX() для каждого столбца.

select pi.id                 pid,
   MAX(n.id)                  nid,
   MAX(n.match_mode),
   MAX(n.match_method),
   MAX(n.match_gene_type),
   MAX(n.notification_status),
   MAX(pi.person_name),
   MAX(pi.id_card_no),
   MAX(pi.race)
from notification n, person_info pi
where (n.src_data_id = pi.id or n.match_data_id = pi.id)
and n.match_mode = '1'
and n.match_gene_type = '1'
and n.notification_status = '2'
and pi.id_card_no IS NOT NULL
group by pi.id
0 голосов
/ 02 ноября 2018

использовать оконную функцию row_number()

with cte as
(
select pi.id                 pid,
   n.id                  nid,
   n.match_mode,
   n.match_method,
   n.match_gene_type,
   n.notification_status,
   pi.person_name,
   pi.id_card_no,
   pi.race,
   row_number() over(partition by pi.id order by pi.id) as rn
from notification n, person_info pi
where (n.src_data_id = pi.id or n.match_data_id = pi.id)
and n.match_mode = '1'
and n.match_gene_type = '1'
and n.notification_status = '2'
and pi.id_card_no IS NOT NULL
) select * from cte where rn=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...