समस्या: तालिका A में प्रत्येक KEY में एक RF रिकॉर्ड और एक SJ रिकॉर्ड होना चाहिए, हालांकि मेरे पास कुछ डुप्लिकेट किए गए SJ रिकॉर्ड हैं।

उद्देश्य: मैं तालिका बी में एसजे रिकॉर्ड का उपयोग करना चाहता हूं ताकि यह पता लगाया जा सके कि तालिका ए में कौन सा एसजे रिकॉर्ड रखना है।

जानकारी: तालिका A और तालिका B एक KEY और SEQ_NBR फ़ील्ड साझा करते हैं।

इनपुट: तालिका ए इस प्रकार दिखती है

KEY    ID_TYPE   SEQ_NBR   BUS_NAME
1234      RF        1       COMP_A
1234      SJ        2       COMP_B
1234      SJ        4       COMP_C
5678      RF        1       COMP_L
5678      SJ        2       COMP_M
5678      SJ        3       COMP_N

टेबल बी इस प्रकार दिखता है

KEY    SEQ_NBR   BUS_NAME
1234      2       COMP_B
5678      3       COMP_N

वांछित परिणाम: मेरा आउटपुट इस प्रकार दिखेगा

KEY    ID_TYPE   SEQ_NBR   BUS_NAME
1234      RF        1       COMP_A
1234      SJ        2       COMP_B
5678      RF        1       COMP_L
5678      SJ        3       COMP_N
0
TheGoat 11 मार्च 2021, 01:17

1 उत्तर

अगर मैं सही ढंग से समझूं, तो आप डुप्लिकेट की संख्या गिन सकते हैं। फिर left join का उपयोग करें और गणना और मिलान दोनों के आधार पर फ़िल्टर करें:

select a.*
from (select a.*,
             count(*) over (partition by key, id_type) as cnt
      from a
     ) a left join
     b
     on b.key = a.key and
        b.seq_nbr = a.seq_nbr and
        b.bus_name = a.bus_name
where cnt = 1 or b.key is not null;
0
Gordon Linoff 10 मार्च 2021, 22:58