मेरे पास ग्राहक आईडी के साथ एक एक्सेस डेटाबेस है। प्रत्येक ग्राहक के पास कई ऑर्डर हो सकते हैं और प्रत्येक ऑर्डर एक अलग प्रकार का हो सकता है। मेरे पास प्रत्येक ऑर्डर प्रकार के लिए तीन अलग-अलग टेबल (ऑनलाइन, इन-स्टोर, पेमेंट प्लान) हैं, प्रत्येक ऑर्डर से विभिन्न राशियों के साथ, सभी एक ग्राहक आईडी से संबंधित हैं। किसी एक तालिका में, दो प्रकार के ऑर्डर प्रकार होते हैं जिन्हें एक ही तालिका के साथ अलग-अलग मात्रा में बनाए रखा जाना चाहिए। मैं प्रत्येक ऑर्डर प्रकार को टोटल नामक एक अन्य तालिका में जोड़ना चाहता हूं। मैं ग्राहक आईडी के आधार पर प्रत्येक प्रकार के लिए योग प्राप्त करने के लिए सफलतापूर्वक एक क्वेरी बना सकता हूं लेकिन मुझे यकीन नहीं है कि उन मानों को अपने में कैसे खींचा जाए कुल तालिका। नीचे दिया गया परिदृश्य कई ग्राहकों के लिए दोहराया गया है और प्रत्येक प्रकार की अपनी तालिका है --- भुगतान योजनाएं एक साथ तालिका में हैं। मेरे पास ऐतिहासिक डेटा है इसलिए मैं इस बात तक सीमित हूं कि मैं विलय क्षेत्रों तक कैसे हेरफेर कर सकता हूं और क्या नहीं।

ग्राहक आईडी#: 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

मेरी कुल तालिका में मेरे पास प्रत्येक प्रकार के लिए एक फ़ील्ड है जो प्रत्येक ग्राहक आईडी द्वारा खर्च की गई राशि और फिर एक फ़ील्ड जहां उनके सभी ऑर्डर प्रकारों को एक समग्र कुल फ़ील्ड में सम्मिलित किया जाता है।

मैं सीख रहा हूं क्योंकि मैं जाता हूं इसलिए किसी भी मदद/उदाहरण की सराहना की जाती है। धन्यवाद।

0
TechEng 25 जुलाई 2017, 02:06

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)
0
Darren Bartrup-Cook 25 जुलाई 2017, 17:45

यहां एक गंदा कामकाज है, हालांकि मुझे लगता है कि इसका एक और सीधा समाधान हो सकता है।

आप एक आउटपुट टेबल बना सकते हैं (मैंने इसे आईडी, ऑनलाइन, इनस्टोर और टोटल में तोड़ दिया) और एक अद्यतन क्वेरी के भीतर 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)
0
Thuro G 25 जुलाई 2017, 16:58