【发布时间】:2011-10-10 09:16:52
【问题描述】:
我正在使用 Microsoft Access 为小型企业进行产品定价。我有一张产品表、我们供应商的价格表和专门的客户表。有不同的查询可以获取我们供应商的价格并对不同的价格水平应用标记。对于某些客户我们对某些产品给予特殊的价格,而其余的产品则属于一定的价格水平。然后,我将客户的特殊定价与他们的价格水平查询结合起来。如果存在特殊价格,则使用该价格而不是其正常价格水平价格。要获得此查询,我首先必须对每个客户进行查询,以从客户定价查询中获取他们的所有产品和特价。然后我将该查询与价格水平查询结合起来。如果我不做第一步并加入带有价格水平查询的客户定价,对同一产品有特殊定价的客户,该产品会出现多次,而我不能拥有。因此,如果我创建一个查询以从客户定价中提取他们的价格,然后加入价格水平,它就可以工作。
对不起,如果我不清楚。如果您有疑问或想了解更多详细信息,我会提供。
我根本不懂 VBA。我可以阅读并遵循,但从未编写过 VBA 代码。
我想要的是 VBA 代码来搜索客户表并检查每个客户是否有自己的查询,将他们的价格与客户价格分开,因此如果添加了新客户,它会自动为他们创建一个查询。然后创建一个查询,将他们的价格水平与刚刚创建的查询连接起来。
这可能吗。或者有没有更好的方法来解决这个问题。非常感谢。
这是我目前的表
供应商 产品 CustomerPrds 客户
Prcode 1-----many Prcode
Prname 客户 ID 很多--------1客户ID
客户价格
这是一个价格水平和一个客户的查询示例
J6
字段: PrCode PrName PrBulked PrMultiple $/GAL $/UNIT
Src: 所有这些都来自 Products tbl "$/GAL:calculated field to mark up supplier$" "$/UNIT:$/GAL * PrMultiple"
CustomerPricing
字段:CustID CustName PrCode PrName Cust$
来源: CustPrds Custms CustPrds Prds CustPrds
Cust1
CustPricing 查询 CustID=1 的所有字段
加入 Cust1 和 J6 加入 J6 中的所有记录和 J6.PrCode=CustomerPricing.PrCode 的记录
PrCode - 来自 J6 的多个。 $/Gal:如果 CustID=1, cust$, J6.$/GAL
这是查询的 SQL
SELECT [Customer Products].customerid,
customers.customer,
[Customer Products].[Product Number],
chevron_products.[MATERIAL NAME],
chevron_products.bulked,
chevron_products.uom,
chevron_products.multiple,
[Customer Products].[Customer Price],
[Customer Price] * [Chevron_Products]![Multiple] AS [$/UNIT]
FROM customers
INNER JOIN ((chevron91311
RIGHT JOIN chevron_products
ON chevron91311.[MATERIAL NUMBER] =
chevron_products.[MATERIAL NUMBER])
INNER JOIN [Customer Products]
ON chevron_products.[MATERIAL NUMBER] =
[Customer Products].[Product Number])
ON customers.[Customer Number] = [Customer Products].customerid;
SELECT [Customer Pricing].customerid,
[Customer Pricing].[Product Number],
[Customer Pricing].[Customer Price]
FROM [Customer Pricing]
WHERE (( ( [Customer Pricing].customerid ) = 2 ));
SELECT j6.[MATERIAL NUMBER],
j6.[MATERIAL NAME],
j6.bulked,
j6.uom,
j6.multiple,
Iif([Customer Pricing].[CustomerID] = 2,
[Customer Pricing].[Customer Price], [J6].[$/GAL]) AS [$/GAL],
[$/GAL] * [J6].[Multiple]
AS [$/UNIT]
FROM j6
LEFT JOIN cobbprds
ON j6.[MATERIAL NUMBER] = cobbprds.[Product Number]
ORDER BY j6.[MATERIAL NAME];
【问题讨论】:
-
请发布您现有的查询/查询。
-
嘿 Lars,在 Stackoverflow 上发布查询的最佳方式是切换到 Access 中的 SQL 视图,然后从该窗口剪切和粘贴文本。它看起来像
SELECT stuff FROM Table1 ... -
呃。好点没想到。我也会补充的
-
至少,您可以将客户称为表单上的控件,例如:
[Customer Pricing].customerid = Forms!MyForm!cboSelectCustomer这意味着您不需要针对每个客户进行查询。还有其他可以简化的事情。 -
我以前没有真正使用过表单。那么我会根据客户定价或客户创建一个表单吗?