Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

दो डेटाबेस तालिकाओं के बीच डेटा की तुलना के आधार पर ऑरैकल व्यू बनाएं

आपको LEAST() की आवश्यकता है UNION . के साथ संयुक्त 3 उपश्रेणियों के साथ कार्य करें खंड। दो उपश्रेणियों में FULL JOIN होना चाहिए तालिकाओं के बीच :

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  

पहले . के लिए मामला:केवल i.member_descr = 'O' के साथ सदस्य_अनुपात के संदर्भ में न्यूनतम मान वापस करने की आवश्यकता है मैच।

सेकंड . के लिए मामला:द्विदिश (FULL JOIN ) तर्क की आवश्यकता बताई गई है

तीसरे . के लिए मामला :एक बाहरी जुड़ाव IS_ID_TST . की स्थिति से संबंधित तालिका (मौजूदा मामले में यह RIGHT JOIN . है member_desct . के गैर-समतुल्य मानों के साथ ) की आवश्यकता है मान 'O' . के लिए (यहां तक ​​कि NULL मान भी हटा दिए जाने चाहिए, और NVL() इस उद्देश्य के लिए फ़ंक्शन जोड़ा गया है )

और तीन मामलों में निर्दिष्ट सभी उपश्रेणियों को UNION . के साथ जोड़ा जाना चाहिए पंक्ति-वार संयोजन प्रदान करने के लिए, जिसमें दोहराई गई पंक्तियों को समाप्त करना शामिल है।

डेमो



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सबसे हाल के रिकॉर्ड को छोड़कर सभी रिकॉर्ड हटाएं?

  2. फाइन-ट्यूनिंग Oracle DG40DBC

  3. ओरेकल में कर्सर का उपयोग करके रिकॉर्ड डालें और अपडेट करें

  4. ORM का क्या मतलब है अगर मुझे Oracle .net Entity Framework के लिए app.config में हर क्षेत्र को परिभाषित करना है

  5. जहां क्लॉज टर्म कोड का चयन करता है