Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erhalten Sie eine Reihe eindeutiger Werte, ohne Werte zu trennen, die zu demselben Werteblock gehören

Dies ist keine vollständige Antwort, aber ich möchte nicht viele Fragen in Kommentare schreiben.
Ihr Hauptziel ist es, Informationen an Menschen zu senden und die Situation zu vermeiden, dass eine Person zweimal ein Fax erhält. Sie brauchen also zuerst eine Liste eindeutiger Empfänger, etwa so:

select distinct otherid
  from NR_PVO_120

Wenn eine Person zwei Faxnummern hat, müssen Sie sich entscheiden, welche Sie wählen:

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

(All dies haben Sie in den Antworten der vorherigen Frage)
Wenn Sie diese Liste von Faxnummern nehmen, erhalten alle Ihre Empfänger das Fax und nur ein Fax für jede Person. Einige Faxnummern werden jedoch nicht verwendet. Sie können sie leicht finden:

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

Wenn Sie ein Fax an eine dieser Nummern senden, erhalten einige Leute ein Fax zweimal.
Englisch ist nicht meine Muttersprache, daher verstehe ich nicht, was Sie meinen, wenn Sie sagen "ohne Faxnummern aufzulösen". Wie ich in Ihrer Frage sehen kann, müssen Sie möglicherweise die Reihenfolge der Faxnummern in Ihrer Frage als Nummernpriorität verwenden (die höhere Nummer befindet sich in der Tabelle - die höhere Wahrscheinlichkeit, sie zu verwenden). Es scheint, als könnten Sie Folgendes verwenden:

select otherid, fax
  from (select otherid, fax, row_number() over (partition by otherid order by row) rn
          from NR_PVO_120)
 where rn = 1

hier row in order by -Klausel ist eine Row aus Ihrer Beispieltabelle.

UPD
S. S. Zu meiner letzten Frage:Wir haben eine Tabelle mit einer bestimmten Reihenfolge, und die Reihenfolge ist wichtig. Wir nehmen Zeilen der Tabelle Zeile für Zeile. Nehmen Sie die erste Zeile und setzen Sie ihre otherid ein und fax zur Ergebnistabelle. Dann nehmen Sie die nächste Reihe. Wenn es ein anderes fax enthält Nummer und otherid , wir nehmen es, wenn otherid bereits in unserer Ergebnistabelle, überspringen wir es. Hast du diesen Algorithmus gefragt?