Oracle
 sql >> Database >  >> RDS >> Oracle

ottenere un numero di valori univoci senza separare i valori che appartengono allo stesso blocco di valori

Questa non è una risposta completa, ma non voglio scrivere molte domande nei commenti.
Il tuo obiettivo principale è inviare informazioni alle persone ed evitare la situazione in cui una persona riceve due volte il fax. Quindi per prima cosa hai bisogno di un elenco di destinatari univoci, come questo:

select distinct otherid
  from NR_PVO_120

Se una persona ha due numeri di fax, devi decidere quale scegliere:

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

(Tutto questo hai nelle risposte alla domanda precedente)
Se prendi questo elenco di numeri di fax, tutti i tuoi destinatari riceveranno il fax e solo un fax per ogni persona. Ma alcuni numeri di fax non verranno utilizzati. Li puoi trovare facilmente:

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

Se invii un fax a uno di questi numeri, alcune persone ricevono un fax due volte.
L'inglese non è la mia lingua madre, quindi non capisco cosa intendi quando dici "senza dividere i numeri di fax". Come posso vedere nella tua domanda, forse è necessario utilizzare l'ordine dei numeri di fax nella tua domanda come priorità del numero (il numero più alto si trova nella tabella - maggiore è la probabilità di usarlo). Sembra che tu possa usare quanto segue:

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

qui row in order by la clausola è una Row dalla tua tabella di esempio.

UPD
P. S. Sulla mia ultima domanda:abbiamo una tabella con un certo ordine e l'ordine è importante. Prendiamo le righe della tabella riga per riga. Prendi la prima riga e inserisci il suo otherid e fax alla tabella dei risultati. Quindi prendi la riga successiva. Se contiene un altro fax numero e otherid , lo prendiamo, se otherid già nella nostra tabella dei risultati, lo saltiamo. Hai chiesto questo algoritmo?