为您的不同订单类型设置单独的表格并没有帮助。对于数据库,最好使用一个包含 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 表)、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)