我正在使用Access 2010
我有两张桌子:
我想要做的是在价格表中检查订单下达时的价格。我试图从Order PLUS获取一个表格,其中包含来自ContracPrices表的相应ContractedPrice和PriceValidFrom的所有字段。
示例:Sample solved database(带@carexcer贡献)
Orders
OrderNumber Contract ProductCode OrderDate PurchasePrice
Ord1 Cont1 AAA 07/05/2012 19,23
Ord1 Cont1 BBB 07/05/2012 5,66
Ord1 Cont1 CCC 07/05/2012 6,64
ContractPrices
Contract ProductCode ContractedPrice PriceValidFrom
Cont1 AAA 21,14 11/02/2010 18:03:01
Cont1 AAA 21,84 08/10/2010 12:58:55
Cont1 AAA 22,06 22/06/2011 22:50:42
Cont1 AAA 1923,7 27/09/2011 14:17:08
Cont1 AAA 20 03/07/2012 12:40:36
Cont1 AAA 22,53 01/08/2012 21:37:26
Cont1 AAA 22,53 07/08/2012 19:33:29
Cont1 AAA 22,53 03/09/2012 18:26:38
Cont1 AAA 22,53 04/09/2012 16:20:09
Cont1 AAA 22,53 05/11/2012 18:53:18
Cont1 AAA 20 11/04/2013 15:28:49
Cont1 AAA 19,84 08/09/2013 19:00:10
DesiredResult
OrderNumber Contract ProductCode OrderDate PurchasePrice ContractedPrice PriceValidFrom
Ord1 Cont1 AAA 07/05/2012 19,23 19,23 27/09/2011 14:17:08
请注意,我不限于从单个合同订购产品代码。与ProductCode的合同是多对多的。
我愿意接受VBA。我不知道如何在不离开Access环境的情况下解决这个问题。我是数据库新手。
我经过了暴力测试,看到我们购买的价格高于合同价格,所以想要测试整个数据库。
我试图搜索这个,但无法简明地表达问题。
答案 0 :(得分:0)
我认为此查询可以解决您的问题:
SELECT
t1.OrderNo,
t1.Contract,
t1.ProductCode,
MAX(t2.PriceValidityStartDate) as PriceValidityStartDate,
MAX(t2.ContractPrice) AS PriceAtTime
FROM
ORDERS t1
LEFT OUTER JOIN
ContractPrices t2
ON t1.Contract = t2.Contract AND t1.ProductCode = t2.ProductCode
WHERE
t1.OrderDate > t2.PriceValidityStartDate
GROUP BY
t1.OrderNo,
t1.Contract,
t1.ProductCode
您在此处sqlfiddle进行测试。