问题描述
我来找您有关我的Access数据库的问题。
为简单起见,我有两个表Products
和Customers
:
这些表来自我创建的用于跟踪销售情况的简单Excel文件。
在此文件中,ItemCount
表中的字段TotalBill
和Customers
是使用countif
和sumif
的计算字段,如下所示:
ItemCount : =COUNTIF(Products[Customer],[@Customer])
TotalBill : =SUMIF(Products[Customer],[@Customer],Products[Price])
我已经绝望地意识到,MS Access在计算字段中没有提供这些功能,但是必须有一种方法可以做到如此基本。
表必须保持分开。
如果有人能以我最感激的方式帮助我
谢谢大家阅读!
解决方法
这看起来像是联接和聚合:
=IF(ISNA(VLOOKUP(A2,$D$2:$D$4,1,FALSE)),"No","Yes")
请注意,您不应使用客户名称来关联这两个表,而应使用客户ID,该ID大概是客户表的主键。
,您没有提及只是想要结果还是要使用计算值更新Customers
表列。因此,如果您要显示所有客户表单customers
表,即使Products
表上没有交易,那么请使用以下查询
SELECT Customers.CustomerID,Customers.Customer,P.Cnt AS ItemCount,P.Sm AS TotalBill
FROM (SELECT products.customer AS PC,Count(Products.Product) AS Cnt,Sum(Products.Price) AS Sm FROM Products GROUP BY Products.Customer) AS P
RIGHT JOIN Customers ON P.PC = Customers.Customer;
尽管
MS-Access
不鼓励将计算值存储到表中[根据需要运行查询或报告],但是您可以根据需要进行操作。因此,要使用Customers
表中的值更新Products
表,可以在UPDATE
查询下面尝试。
UPDATE Customers SET Customers.ItemCount =
DCount("Product","Products","Customer= '" & Customers.Customer & "'"),Customers.TotalBill =
DSum("Price","Customer= '" & [Customers].[Customer] & "'");