sql >> Database >  >> RDS >> Oracle

maak een orakelweergave op basis van een vergelijking van gegevens tussen twee databasetabellen

Je hebt LEAST() . nodig functie samen met 3 subquery's gecombineerd met UNION clausules. Twee van de subquery's moeten FULL JOIN bevatten onder tafels :

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  

voor de eerste case :U hoeft alleen de minimumwaarde in termen van member_ratio te retourneren met i.member_descr = 'O' wedstrijden.

voor de tweede case :Bidirectioneel(FULL JOIN ) er wordt gezegd dat logica nodig is

voor de derde case :Een outer join respectievelijk voor de positie van IS_ID_TST table (in het huidige geval is het RIGHT JOIN )is nodig samen met niet-equivalente waarden van member_desct naar de waarde 'O' (zelfs NULL-waarden moeten worden verwijderd, en NVL() voor dit doel is een functie toegevoegd )

En al die subquery's die in de drie gevallen zijn gespecificeerd, moeten worden gecombineerd met UNION om rijgewijze combinatie te bieden, inclusief de eliminatie van de herhaalde rijen.

Demo



  1. sql-schuifvenster - maximale waarde vinden over interval

  2. Het aantal kolommen van mysql.user is onjuist. Verwacht 42, gevonden 44. De tabel is waarschijnlijk beschadigd

  3. Kolom beveiligen, update niet toestaan, alleen invoegen toestaan ​​als NULL in MySQL

  4. Entity Framework en string als NCLOB op Oracle Db