sql >> Base de Datos >  >> RDS >> Oracle

obtener una cantidad de valores únicos sin separar los valores que pertenecen al mismo bloque de valores

Esta no es una respuesta completa, pero no quiero escribir muchas consultas en los comentarios.
Su objetivo principal es enviar información a las personas y evitar la situación en la que una persona recibe el fax dos veces. Entonces, primero necesita una lista de destinatarios únicos, como esta:

select distinct otherid
  from NR_PVO_120

Si una persona tiene dos números de fax, debe decidir cuál elegir:

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

(Todo esto lo tiene en las respuestas de la pregunta anterior)
Si toma esta lista de números de fax, todos sus destinatarios reciben el fax y solo un fax para cada persona. Pero algunos números de fax no se utilizarán. Puedes encontrarlos fácilmente:

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

Si envía un fax a cualquiera de estos números, algunas personas reciben un fax dos veces.
El inglés no es mi idioma nativo, por lo que no entiendo a qué se refiere cuando dice "sin dividir los números de fax". Como puedo ver en su pregunta, posiblemente necesite usar el orden de los números de fax en su pregunta como prioridad de número (el número más alto se encuentra en la tabla, la probabilidad más alta de usarlo). Parece que puedes usar lo siguiente:

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

aquí row en order by la cláusula es una Row de su tabla de ejemplo.

UPD
P. S. Sobre mi última consulta:tenemos una tabla con cierto orden, y el orden es importante. Tomamos filas de la tabla línea por línea. Tome la primera fila y coloque su otherid y fax a la tabla de resultados. Luego tome la siguiente fila. Si contiene otro fax número y otherid , lo tomamos, si otherid ya en nuestra tabla de resultados, lo omitimos. ¿Le preguntaste a este algoritmo?