मैं थोड़ी देर के लिए आपकी स्कीमा और एसक्यूएल देख रहा हूं और मैं आपके तर्क को समझ नहीं पा रहा हूं। चीजें जैसे मैं उन्हें देखता हूं:
- आपके पास लेन-देन का एक सेट है (9 सटीक होने के लिए);
- प्रत्येक लेन-देन के लिए आपके पास डेबिट और क्रेडिट पक्षों का विवरण है;
account_code
का उपयोग करके हर तरफ, आप खातों के बारे में जानकारी प्राप्त कर सकते हैं।
तो, मैं शुरुआत के लिए इस तरह से जाऊंगा और एक VIEW
बनाया होगा , जो आपको आपके लेन-देन के बारे में सभी आवश्यक जानकारी प्रदान करेगा। मैंने INNER
. का उपयोग किया है यहां शामिल होता है, जैसा कि मेरा मानना है कि प्रत्येक लेनदेन जरूरी डेबिट और क्रेडिट दोनों पक्ष हैं, और प्रत्येक पक्ष का, बदले में, एक खाता होना चाहिए:
CREATE VIEW all_transactions AS
SELECT ti.transaction_id tid, ti.voucher_no tvno, ti.voucher_date tvdt,
ds.account_code dacc, ds.amount damt, da.name daname, da.type dat,
cs.account_code cacc, cs.amount camt, ca.name caname, ca.type cat
FROM transaction_info ti
JOIN debit_side ds ON ds.transaction_id_dr = ti.transaction_id
JOIN credit_side cs ON cs.transaction_id_cr = ti.transaction_id
JOIN accounts da ON da.code = ds.account_code
JOIN accounts ca ON ca.code = cs.account_code;
अब, आपके प्रश्नों को देखकर, ऐसा लगता है कि आप प्रत्येक खाता कोड के लिए सभी काउंटर-साइड संचालन की एक सूची प्राप्त करने का प्रयास कर रहे हैं। मुझे नहीं पता कि इसका उद्देश्य क्या है, लेकिन मैं निम्नलिखित कार्य करूंगा:
- अद्वितीय खाता कोड की एक सूची का चयन किया;
- प्रत्येक खाता कोड के लिए डेबिट-साइड संचालन की एक समेकित सूची बनाई, जहां ऐसा कोड क्रेडिट पक्ष में था;
- क्रेडिट-साइड संचालन के लिए एक ही समेकित सूची बनाई, जहां ऐसा खाता डेबिट पक्ष पर था;
- और प्रत्येक खाता कोड को बीच में रखें।
तो कुछ ऐसा काम कर सकता है:
SELECT group_concat(dacc) "D-Accounts",
group_concat(damt) "D-Amounts",
group_concat(daname) "D-Names",
group_concat(dvdt) "D-Dates",
code, name,
group_concat(cacc) "C-Accounts",
group_concat(camt) "C-Amounts",
group_concat(caname) "C-Names",
group_concat(cvdt) "C-Dates"
FROM (
SELECT atl.dacc, atl.damt, atl.daname, atl.tvdt dvdt,
a.code, a.name, NULL cacc, NULL camt, NULL caname, NULL cvdt
FROM accounts a
LEFT JOIN all_transactions atl ON atl.cacc = a.code
UNION ALL
SELECT NULL, NULL, NULL, NULL, a.code, a.name,
atr.cacc, atr.camt, atr.caname, atr.tvdt cvdt
FROM accounts a
RIGHT JOIN all_transactions atr ON atr.dacc = a.code
) full_join
GROUP BY code, name
ORDER BY code;
अंदरूनी हिस्से में मैं FULL OUTER
का अनुकरण कर रहा हूं 2 अन्य जॉइन को जोड़कर जुड़ें, LEFT
और RIGHT
वाले। और बाहरी भाग सभी समूहों का प्रदर्शन करता है। परिणाम पर एक नजर डालें
।
ध्यान दें, यदि आप परिणाम से कॉलम जोड़ना/निकालना चाहते हैं, तो आपको आंतरिक और बाहरी दोनों प्रश्नों को संशोधित करना चाहिए।
मुझे आशा है कि आप यही खोज रहे हैं।