Oracle
 sql >> Baza danych >  >> RDS >> Oracle

utworzyć widok oracle na podstawie porównania danych między dwiema tabelami bazy danych

Potrzebujesz LEAST() funkcja wraz z 3 podzapytaniami w połączeniu z UNION klauzule. Dwa z podzapytań powinny zawierać FULL JOIN wśród tabel :

CREATE VIEW V_MEMBER_FUND AS    
SELECT i.fund_isin,
       i.member_descr,
       LEAST(i.member_ratio, t.member_ratio) AS member_ratio,
       i.allocationassettype
  FROM IS_ID i
  JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
   AND t.member_descr = i.member_descr
 WHERE i.member_descr = 'O'
UNION
SELECT LEAST(NVL(i.fund_isin,t.fund_isin),NVL(t.fund_isin,i.fund_isin)) AS fund_isin,
       LEAST(NVL(i.member_descr,t.member_descr),NVL(t.member_descr,i.member_descr)) AS member_descr,
       LEAST(NVL(i.member_ratio,t.member_ratio),NVL(t.member_ratio,i.member_ratio)) AS member_ratio,
       LEAST(NVL(i.allocationassettype,t.allocationassettype),NVL(t.allocationassettype,i.allocationassettype)) AS allocationassettype
  FROM IS_ID i
  FULL JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
 WHERE (i.member_descr = 'O' OR t.member_descr = 'O' )
   AND ( t.fund_isin IS NULL OR i.fund_isin IS NULL )
UNION
SELECT t.fund_isin,
       t.member_descr,
       t.member_ratio,
       t.allocationassettype
  FROM IS_ID i
 RIGHT JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
   AND t.member_descr = i.member_descr
 WHERE (NVL(i.member_descr,'XYZ') != 'O' OR NVL(t.member_descr,'XYZ') != 'O' )
   AND t.fund_isin IS NOT NULL  

dla pierwszego case :wystarczy zwrócić minimalną wartość pod względem member_ratio z i.member_descr = 'O' mecze.

przez drugi case :Dwukierunkowy(FULL JOIN ) mówi się, że logika jest potrzebna

dla trzeciego przypadek :złączenie zewnętrzne odpowiednio do pozycji IS_ID_TST table(w obecnym przypadku jest to RIGHT JOIN ) jest potrzebne wraz z nierównoważnymi wartościami member_desct do wartości 'O' (nawet wartości NULL powinny być ograniczone, a NVL() w tym celu dodano funkcję )

Wszystkie te podzapytania określone w trzech przypadkach powinny być połączone z UNION w celu zapewnienia kombinacji rzędów, w tym eliminacji powtarzających się rzędów.

Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz wartość w pojedynczej kolumnie i zapisz ją w zmiennej oracle sql

  2. Konwertuj nowy wiersz na XML wewnątrz wyzwalacza Oracle

  3. UNPIVOT na nieokreślonej liczbie kolumn

  4. Jak przekazać datatable jako dane wejściowe do procedury w C#?

  5. Błąd podczas tworzenia widoku w Oracle DB