2017-07-24 66 views
0

我有一個帶有客戶ID的Access數據庫。每個客戶可以有多個訂單,每個訂單可以是不同的類型。我有三個單獨的表格(在線,店內,付款計劃),每種訂單類型有不同的金額,都與客戶ID有關。在其中一個表中,有兩種類型的訂單類型,必須分別使用同一個表來維護金額。 我想在另一個稱爲總計的表中總結每個訂單類型。我可以成功地創建一個查詢來獲得每個類型的總和基於客戶ID,但我不知道如何拉我的總表中的這些值。下面的情況對多個客戶重複,每種類型都是它自己的表 - 支付計劃一起放在一個表中。我有歷史數據,所以我受限於我可以如何合併字段,什麼不可以。從另一個表中的一個表中總結字段,從3個不同的表中求和

客戶編號: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

在我的總計表中,我有一個每種類型的字段,用於總結每個客戶ID花費的金額,然後是一個將所有訂單類型彙總到一個總的總字段中的字段。

我在學習,所以任何幫助/示例表示讚賞。謝謝。

回答

0

爲不同的訂單類型分開表格不會有幫助。對於數據庫,最好爲具有sale_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聲明字段名稱。你可以在每個模塊中完成,但Access只能查看第一個模塊。

與所有查詢一樣,結果以表格的形式顯示,並可以作爲對待。所以現在我們需要列出CustomerName(我假設你有一個Customers表),OrderTypeCustomer & 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返回只記錄其中值出現兩個表(Customers表查詢表的&結果)英寸
UNION QUERY包裝在括號中,並給出名稱T1並加入到CustomerID字段中的Customers表。
我們對不屬於聚合函數的所有字段進行分組,因此可以在CustomerNameOrderType上進行分組,並對Amount字段進行求和。

這就是您真正需要做的 - 每次您希望總計獲得最新的值時,讓查詢運行。應該沒有必要將結果推送到Totals表格中,因爲只要您進行新的銷售(或某人退貨),該表格就會過期。

如果你真的想INSERT這些數字爲Total表中的第一行只是添加到SQL:

INSERT INTO Total (CustomerName, OrderType, Amount) 
+0

哇!非常感謝你的詳細解釋和所有的代碼,這真是太棒了。你的假設是正確的。我非常感謝你的幫助! – TechEng

0

這是一個骯髒的解決方法,但我認爲可能有一個更直接的解決方案。您可以創建一個輸出表(我把它分解爲ID,Online,InStore和Total),並在UPDATE查詢中使用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

謝謝你,我會記住這一點,@ThuroG – TechEng

相關問題