sql >> Databáze >  >> RDS >> Oracle

získat řadu jedinečných hodnot bez oddělování hodnot, které patří do stejného bloku hodnot

Toto není úplná odpověď, ale nechci do komentářů psát mnoho dotazů.
Vaším hlavním cílem je posílat informace lidem a vyhnout se situaci, kdy jeden člověk obdrží fax dvakrát. Nejprve tedy potřebujete seznam jedinečných příjemců, jako je tento:

select distinct otherid
  from NR_PVO_120

Pokud má jedna osoba dvě faxová čísla, musíte se rozhodnout, které vybrat:

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

(To vše máte v odpovědích na předchozí otázku)
Pokud si vezmete tento seznam faxových čísel, všichni vaši příjemci obdrží fax a pouze jeden fax pro každou osobu. Některá faxová čísla však nebudou použita. Můžete je snadno najít:

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

Pokud pošlete fax na kterékoli z těchto čísel, někteří lidé dostanou jeden fax dvakrát.
Angličtina není můj rodný jazyk, takže nerozumím, co máte na mysli, když říkáte „bez rozdělení faxových čísel“. Jak vidím ve Vašem dotazu, je možné, že budete muset jako prioritu čísla použít pořadí faxových čísel ve Vašem dotazu (čím vyšší číslo je v tabulce, tím vyšší pravděpodobnost jeho použití). Zdá se, že můžete použít následující:

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

zde row v order by klauzule je Row z vaší ukázkové tabulky.

UPD
P. S. K mému poslednímu dotazu:máme tabulku s určitým pořadím a pořadí je důležité. Řádky tabulky bereme řádek po řádku. Vezměte první řádek a vložte jeho otherid a fax do výsledkové tabulky. Pak vezměte další řádek. Pokud obsahuje další fax číslo a otherid , bereme to, pokud otherid již v naší výsledkové tabulce, přeskočíme. Ptali jste se tohoto algoritmu?



  1. GreenDAO podporuje více vztahů mezi tabulkami

  2. Jak změnit řazení databáze, tabulky, sloupce?

  3. Datový model Důležitá data

  4. Výsledky oddělené čárkami v SQL