आपको 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
. के साथ जोड़ा जाना चाहिए पंक्ति-वार संयोजन प्रदान करने के लिए, जिसमें दोहराई गई पंक्तियों को समाप्त करना शामिल है।