मेरे पास ग्राहक आईडी के साथ एक एक्सेस डेटाबेस है। प्रत्येक ग्राहक के पास कई ऑर्डर हो सकते हैं और प्रत्येक ऑर्डर एक अलग प्रकार का हो सकता है। मेरे पास प्रत्येक ऑर्डर प्रकार के लिए तीन अलग-अलग टेबल (ऑनलाइन, इन-स्टोर, पेमेंट प्लान) हैं, प्रत्येक ऑर्डर से विभिन्न राशियों के साथ, सभी एक ग्राहक आईडी से संबंधित हैं। किसी एक तालिका में, दो प्रकार के ऑर्डर प्रकार होते हैं जिन्हें एक ही तालिका के साथ अलग-अलग मात्रा में बनाए रखा जाना चाहिए। मैं प्रत्येक ऑर्डर प्रकार को टोटल नामक एक अन्य तालिका में जोड़ना चाहता हूं। मैं ग्राहक आईडी के आधार पर प्रत्येक प्रकार के लिए योग प्राप्त करने के लिए सफलतापूर्वक एक क्वेरी बना सकता हूं लेकिन मुझे यकीन नहीं है कि उन मानों को अपने में कैसे खींचा जाए कुल तालिका। नीचे दिया गया परिदृश्य कई ग्राहकों के लिए दोहराया गया है और प्रत्येक प्रकार की अपनी तालिका है --- भुगतान योजनाएं एक साथ तालिका में हैं। मेरे पास ऐतिहासिक डेटा है इसलिए मैं इस बात तक सीमित हूं कि मैं विलय क्षेत्रों तक कैसे हेरफेर कर सकता हूं और क्या नहीं।
ग्राहक आईडी#: 1
ऑर्डर का प्रकार: ऑनलाइन ऑनलाइन राशि: $20.00
ऑर्डर का प्रकार: ऑनलाइन ऑनलाइन राशि: $40.00
ऑनलाइन राशि का योग: $60.00
ऑर्डर का प्रकार: इन-स्टोर ऑनलाइन राशि: $35.00
ऑर्डर का प्रकार: इन-स्टोर ऑनलाइन राशि: $60.00
इन-स्टोर राशि का योग: $95.00
आदेश प्रकार: भुगतान योजना भुगतान योजना 1 राशि: $30.00
भुगतान योजना 1 राशि: $23.00
भुगतान योजना का योग 1 राशि: $53.00
आदेश प्रकार: भुगतान योजना 2 भुगतान योजना 2 राशि: $35.00
भुगतान योजना 2 राशि: $30.00
भुगतान योजना का योग 2 राशि: $65.00
मेरी कुल तालिका में मेरे पास प्रत्येक प्रकार के लिए एक फ़ील्ड है जो प्रत्येक ग्राहक आईडी द्वारा खर्च की गई राशि और फिर एक फ़ील्ड जहां उनके सभी ऑर्डर प्रकारों को एक समग्र कुल फ़ील्ड में सम्मिलित किया जाता है।
मैं सीख रहा हूं क्योंकि मैं जाता हूं इसलिए किसी भी मदद/उदाहरण की सराहना की जाती है। धन्यवाद।
2 जवाब
आपके अलग-अलग ऑर्डर प्रकारों के लिए अलग-अलग टेबल होने से मदद नहीं मिलती है। डेटाबेस के लिए sales_type फ़ील्ड के साथ सभी बिक्री के लिए एक टेबल रखना बेहतर होगा।
आप बिल्कुल वर्णन नहीं करते कि आपकी टेबल कैसी दिखती है, इसलिए मुझे कुछ धारणाएं करनी पड़ीं। यदि आपकी तालिका में एक OrderType
फ़ील्ड है तो आप अपनी सभी बिक्री को एक साथ जोड़ने के लिए एक यूनियन क्वेरी बना सकते हैं:
SELECT CustomerID
, OrderType
, Amount
FROM Online
UNION ALL SELECT CustomerID
, OrderType
, Amount
FROM [In-Store]
UNION ALL SELECT CustomerID
, OrderType
, Amount
FROM [Payment Plan]
यदि आपके पास OrderType
नहीं है, तो आप क्वेरी में मानों को हार्ड-कोड कर सकते हैं:
SELECT CustomerID
, "Online" AS OrderType
, Amount
FROM Online
UNION ALL SELECT CustomerID
, "In-Store"
, Amount
FROM [In-Store]
UNION ALL SELECT CustomerID
, "Payment Plan"
, Amount
FROM [Payment Plan]
नोट - पहले Select
ब्लॉक में OrderType
के लिए फ़ील्ड नाम घोषित किया गया है। आप इसे प्रत्येक ब्लॉक में कर सकते हैं, लेकिन एक्सेस केवल पहले को देखता है।
सभी प्रश्नों की तरह, परिणाम तालिका के रूप में आते हैं और उन्हें इस तरह माना जा सकता है। तो अब हमें CustomerName
(मैं मान रहा हूं कि आपके पास एक Customers
तालिका है), OrderType
और उस राशि का योग Customer
और OrderType
.
SELECT CustomerName
, OrderType
, SUM(Amount)
FROM Customers INNER JOIN
(
SELECT CustomerID
, OrderType
, Amount
FROM Online
UNION ALL SELECT CustomerID
, OrderType
, Amount
FROM [In-Store]
UNION ALL SELECT CustomerID
, OrderType
, Amount
FROM [Payment Plan]
) T1 ON Customers.CustomerID = T1.CustomerID
GROUP BY CustomerName
, OrderType
आपकी तीन तालिकाओं की सभी बिक्री में ग्राहक तालिका में एक ग्राहक होगा, इसलिए हम INNER JOIN
का उपयोग केवल उन रिकॉर्ड को वापस करने के लिए कर सकते हैं जहां मान दोनों तालिकाओं (ग्राहक तालिका और क्वेरी तालिका का परिणाम) में दिखाई देता है।
UNION QUERY
को कोष्ठक में लपेटा गया है और T1
नाम दिया गया है और CustomerID
फ़ील्ड पर Customers
तालिका से जुड़ गया है।
हम उन सभी फ़ील्ड को समूहित करते हैं जो एक समग्र फ़ंक्शन का हिस्सा नहीं हैं, इसलिए CustomerName
और OrderType
पर समूह करें और Amount
फ़ील्ड को जोड़ दें।
आपको बस इतना ही करना है - हर बार जब आप कुल योग को सबसे अद्यतित मान प्राप्त करना चाहते हैं तो क्वेरी को चलने दें। परिणामों को Totals
तालिका में धकेलने की आवश्यकता नहीं होनी चाहिए क्योंकि जैसे ही आप कोई नई बिक्री करेंगे (या कोई व्यक्ति कुछ लौटाएगा) वह पुराना हो जाएगा।
यदि आप वास्तव में INSERT
इन आंकड़ों को एक Total
तालिका में बनाना चाहते हैं, तो SQL में पहली पंक्ति जोड़ें:
INSERT INTO Total (CustomerName, OrderType, Amount)
यहां एक गंदा कामकाज है, हालांकि मुझे लगता है कि इसका एक और सीधा समाधान हो सकता है।
आप एक आउटपुट टेबल बना सकते हैं (मैंने इसे आईडी, ऑनलाइन, इनस्टोर और टोटल में तोड़ दिया) और एक अद्यतन क्वेरी के भीतर DSum फ़ंक्शंस का उपयोग करें।
UPDATE tbl_Totals SET
Total_InStore = DSum("Amount", "tbl_InStore", "Customer_ID = " & Customer_ID),
Total_Online = DSum("Amount", "tbl_Online", "Customer_ID = " & Customer_ID),
Total = DSum("Amount", "tbl_InStore", "Customer_ID = " & Customer_ID) + DSum("Amount", "tbl_Online", "Customer_ID = " & Customer_ID)
संबंधित सवाल
नए सवाल
database
एक डेटाबेस डेटा का एक संगठित संग्रह है। यह स्कीमा, तालिकाओं, प्रश्नों, रिपोर्टों, विचारों और अन्य वस्तुओं का संग्रह है। डेटा को आम तौर पर वास्तविकता के मॉडल पहलुओं के लिए व्यवस्थित किया जाता है जो जानकारी की आवश्यकता वाली प्रक्रियाओं का समर्थन करता है। यदि आप किसी डेटाबेस को डिज़ाइन करने के बारे में कोई प्रश्न पूछना चाहते हैं, तो इस टैग का उपयोग करें। यदि यह किसी विशेष डेटाबेस प्रबंधन प्रणाली, (जैसे, MySQL) के बारे में है, तो कृपया इसके बजाय उस टैग का उपयोग करें।