Това не е пълен отговор, но не искам да пиша много запитвания в коментарите.
Основната ви цел е да изпращате информация до хората и да избягвате ситуацията, когато един човек получава факс два пъти. Така че първо имате нужда от списък с уникални получатели, като този:
select distinct otherid
from NR_PVO_120
Ако едно лице има два факс номера, трябва да решите кой да изберете:
select otherid, fax
from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
from NR_PVO_120)
where rn = 1
(Всичко това имате в отговорите на предишния въпрос)
Ако вземете този списък с номера на факсове, всички ваши получатели получават факса и само един факс за всеки човек. Но някои факс номера няма да се използват. Можете лесно да ги намерите:
select otherid, fax
from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
from NR_PVO_120)
where rn > 1
Ако изпратите факс на някой от тези номера, някои хора получават един факс два пъти.
Английският не е моят роден език, така че не разбирам какво имате предвид, когато казвате „без да разделяте номерата на факсовете“. Както виждам във вашия въпрос, вероятно трябва да използвате реда на факс номерата във вашия въпрос като приоритет на номера (колкото по-голямо число е разположено в таблицата - толкова по-голяма е вероятността да го използвате). Изглежда, че можете да използвате следното:
select otherid, fax
from (select otherid, fax, row_number() over (partition by otherid order by row) rn
from NR_PVO_120)
where rn = 1
тук row
в order by
клаузата е Row
от примерната ви таблица.
UPD
П. S. Относно последното ми запитване:имаме таблица с определен ред и редът е важен. Взимаме ред по ред от таблицата. Вземете първия ред и поставете неговия otherid
и fax
към таблицата с резултатите. След това вземете следващия ред. Ако съдържа друг fax
номер и otherid
, ние го приемаме, ако otherid
вече в нашата таблица с резултати, ние я пропускаме. Попитахте ли този алгоритъм?