在我的数据库中,我有两个与之相关的表。第一个表是Offer Information表(OfferList)。第二个表是或多或少的报价进度(Ledger)。 OfferID在分类帐条目中引用。但是,由于Ledger中有相同商品的多个条目,因此我有一个引用特定条目的EntryID。两种形式都有一个名为status的字段。每个Ledger.Entry的状态不会更改,但商品的状态会根据最后一个条目而更改。我需要Access才能根据我目前在我的表单中使用的Ledger.Entry自动更新OfferID.Status。 I.E.我使用具有HLID,日期,状态,注释的Ledger.Entry表单。完成Ledger.Entry并保存/更新Ledger表后,我希望Offer.ID.Status更新为我在Ledger表单上放入Ledger.Entry.Status的内容。问题是我只想更新我目前正在使用的优惠中的记录。我怀疑我将使用VBA来实现我的目标。 HL#链接到HLID。
E.G。
OfferList
HL# Status Agent Buyer
ID01 Presented Jim W. Roger R.
ID02 Failed Jim W. Wilma S.
ID03 Accepted Jeff H. Roger R.
ID04 Accepted Andy K. Peter P.
分类帐
EntryID HLID Date Status
01 ID03 04/05/13 Presented
02 ID03 04/07/13 Accepted
03 ID02 04/04/13 Presented
04 ID02 04/04/13 Failed
05 ID03 05/05/13 Closed
当我将最后一行输入Ledger时,我希望ID03的OfferList中的状态更新为已关闭。
答案 0 :(得分:2)
我非常同意Andy的声明,“状态不应该在优惠表中重复,只需在必要时通过根据日期字段读取分类帐表中的最新状态来确定。”
这是我Ledger
表的版本。除了lDate
字段中的日期之外,我还存储了一天中的时间。表格设计包含HLID
和lDate
组合的唯一索引。这样就可以确定哪一行是HLID = ID02
的最新行。
EntryID HLID lDate Status
1 ID03 4/5/2013 9:00:00 AM Presented
2 ID03 4/7/2013 9:00:00 AM Accepted
3 ID02 4/4/2013 9:00:00 AM Presented
4 ID02 4/4/2013 3:00:00 PM Failed
5 ID03 5/5/2013 9:00:00 AM Closed
在OffersList
表格中,我将HL#
重命名为HLID
并放弃了Status
字段。通过这些表更改,下面的查询将在Access 2007中返回此输出。
HLID Status
ID01
ID02 Failed
ID03 Closed
ID04
SELECT o.HLID, sub2.Status
FROM
OfferList AS o
LEFT JOIN
(
SELECT l.HLID, l.Status
FROM
(
SELECT HLID, Max(lDate) AS MaxOflDate
FROM Ledger
GROUP BY HLID
) AS sub1
INNER JOIN Ledger AS l
ON
(sub1.MaxOflDate = l.lDate)
AND (sub1.HLID = l.HLID)
) AS sub2
ON o.HLID = sub2.HLID;