मेरे पास नीचे एक डेटासेट है:

|acc_no|acc_type_id|bal_amt|bal_type_id|curr_code    |forex        |  
|   123|          1| 123.45|          1|          USD|          1.0|  
|   123|          1|  124.0|          2|          USD|          1.0|  
|   123|          1| 200.56|          3|          USD|          1.0|  
|   124|          2|34500.0|          1|          INR|        0.014|  
|   124|          2|42000.0|          3|          INR|        0.014|  
|   125|          1|  470.0|          2|          USD|          1.0|  
|   125|          1|  470.0|          3|          USD|          1.0|  
|   126|          1|    0.0|          1|          USD|          1.0|  
|   126|          2|  370.0|          3|          USD|          1.0|  

मुझे उन पंक्तियों का चयन करने की आवश्यकता है जहां bal_type_id = 3 केवल bal_amt> 0 के लिए bal_type_id = 1 के लिए है।

आउटपुट डेटासेट:

|acc_no|acc_type_id|bal_amt|bal_type_id|curr_code    |forex        |  
|   124|          2|42000.0|          3|          INR|        0.014|  
|   123|          1| 200.56|          3|          USD|          1.0|  

मैं यह कैसे कर सकता हूँ?। कृपया मदद करे।

0
Mohammad Sunny 9 अक्टूबर 2020, 15:06

1 उत्तर

सबसे बढ़िया उत्तर

आप विंडो फ़ंक्शंस का उपयोग कर सकते हैं:

select t.*
from (select t.*,
             max(case when bal_type_id = 1 then bal_amt end) over (partition by acc_no) as bal_amt_1
      from t
     ) t
where bal_amt_1 > 0 and bal_type_id = 3;

या, आप exists का उपयोग कर सकते हैं:

select t.*
from t
where t.bal_type_id = 3 and
      exists (select 1
              from t t2
              where t2.acc_no = t.acc_no and
                    t2.bal_type_id = 1 and
                    t2.amt > 0
             );
2
Gordon Linoff 9 अक्टूबर 2020, 15:08