ऐसा लगता है कि आप परिवार तालिका में पंक्तियों को "क्रमिक रूप से" ऋण आवंटित करने का प्रयास कर रहे हैं। इसे हल करने का तरीका यह है कि पहले सही पंक्तियों को प्राप्त किया जाए, और फिर पंक्तियों को ऋण दिया जाए।
सही पंक्तियाँ (और पहले तीन कॉलम) हैं:
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
ध्यान दें कि यह दोहराए गए मानों के लिए कॉलम में हाइफ़न नहीं डालता है, यह वास्तविक मानों को रखता है। यद्यपि आप SQL में हाइफ़न की व्यवस्था कर सकते हैं, यह एक बुरा विचार है। SQL परिणाम तालिकाओं के रूप में होते हैं, जो प्रत्येक कॉलम और प्रत्येक पंक्ति के मानों के साथ अनियंत्रित सेट होते हैं। जब आप हाइफ़न डालना शुरू करते हैं, तो आप ऑर्डर पर निर्भर होते हैं।
अब समस्या ऋण में शामिल होने की है। यह वास्तव में बहुत आसान है, row_number()
. का उपयोग करके एक join
. जोड़ने के लिए कुंजी:
select f.EmpId, e.Name, f.Relationship, l.LoanId
from Employee e left join
(select f.*, row_number() over (partition by f.EmpId order by (select NULL)) as seqnum
from family f
) f
on f.empid = e.empid left join
(select l.*, row_number() over (partition by l.EmpId order by (select NULL)) as seqnum
from Loan l
) l
on f.EmpId = l.EmpId and f.seqnum = l.seqnum;
ध्यान दें कि यह किसी दिए गए कर्मचारी के लिए ऋण के असाइनमेंट के आदेश की गारंटी नहीं देता है। ऐसा लगता है कि आपके डेटा में अधिक सुसंगत असाइनमेंट को संभालने के लिए पर्याप्त जानकारी नहीं है।