これは完全な答えではありませんが、コメントに多くの質問を書きたくありません。
あなたの主な目標は、人々に情報を送信し、1人の人が2回FAXを受信する状況を回避することです。したがって、最初に次のような一意の受信者のリストが必要です。
select distinct otherid
from NR_PVO_120
1人が2つのFAX番号を持っている場合は、どちらを選択するかを決める必要があります。
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
(これはすべて、前の質問の回答にあります)
このFAX番号のリストを取得すると、すべての受信者がFAXを受信し、すべての人に1つのFAXのみが送信されます。ただし、一部のファックス番号は使用されません。簡単に見つけることができます:
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
この番号のいずれかにFAXを送信すると、1つのFAXを2回受信する人もいます。
英語は私の母国語ではないため、「FAX番号を分割せずに」とはどういう意味かわかりません。あなたの質問でわかるように、おそらくあなたはあなたの質問のファックス番号の順序を番号の優先順位として使用する必要があります(番号が大きいほどテーブルにあります-それを使用する可能性が高くなります)。次のように使用できるようです:
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
P. S.最後のクエリについて:特定の順序のテーブルがあり、順序は重要です。テーブルの行を1行ずつ取得します。最初の行を取得し、そのotherid
を配置します およびfax
結果テーブルに。次に、次の行を取ります。別のfax
が含まれている場合 番号とotherid
、otherid
の場合は、それを受け取ります すでに結果テーブルにあるので、スキップします。このアルゴリズムを尋ねましたか?