Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्वेरी में समूह का अजीब व्यवहार जिसे अनुकूलित करने की आवश्यकता है

मैं थोड़ी देर के लिए आपकी स्कीमा और एसक्यूएल देख रहा हूं और मैं आपके तर्क को समझ नहीं पा रहा हूं। चीजें जैसे मैं उन्हें देखता हूं:

  • आपके पास लेन-देन का एक सेट है (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 वाले। और बाहरी भाग सभी समूहों का प्रदर्शन करता है। परिणाम पर एक नजर डालें

ध्यान दें, यदि आप परिणाम से कॉलम जोड़ना/निकालना चाहते हैं, तो आपको आंतरिक और बाहरी दोनों प्रश्नों को संशोधित करना चाहिए।

मुझे आशा है कि आप यही खोज रहे हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phpmyadmin का उपयोग करके संग्रहीत कार्यविधि कैसे लिखें और php के माध्यम से इसका उपयोग कैसे करें?

  2. (1, 2) (2, 1) मैत्री परिदृश्य में पारस्परिक मित्र प्राप्त करने के तरीके क्या हैं?

  3. MySQL त्रुटि 1436:थ्रेड स्टैक ओवररन, साधारण क्वेरी के साथ

  4. UserID(PK) का चयन करके ExecuteReader पर MySqlException

  5. अल्पविराम के साथ मूल्यों को कैसे सम्मिलित करें? स्विच स्टेटमेंट में