我有一个MS Access 2007数据库,我需要为其创建更新。我想要更新的表格如下:
CarID WeekOf NumDataPoints NumWksZeroPoints
3AA May-14-2011 23 0
7BB May-14-2011 9 0
3AA May-21-2011 35 0
7BB May-21-2011 0 1
3AA May-28-2011 24
7BB May-28-2011 0
我正在处理5月28日至2011年5月28日的最新记录集,其要点是更新每辆车的周数没有数据点。我通过检查当前周点数来做到这一点,如果它确实有一些点,那么#WeeksZeroPoints设置为零,如果当前点数为零,那么我将前几周计数并递增1。对于我上周,我会输入
0
2
所以我尝试了类似
的东西UPDATE tblCars
SET NumWksZeroPoints = IIF(NumDataPoints<>0, 0, (SELECT MAX(NumWksZeroPoints) AS wzp
FROM tblCars AS f
WHERE f.CarID=tblCars.CarID AND
f.WeekEnding=#5/21/2011#) + 1
)
WHERE WeekOf=#5/28/2011#;
不幸的是,这不像我想的那样有效。我认为我有这个概念和大部分的SQL,我似乎无法让它工作。这是针对MS Access的,所以我知道的其他一些技巧根本不起作用。任何帮助表示赞赏。
答案 0 :(得分:2)
您可以(有些人可能会说)应该这样做,而不更新表格。如果您每周捕获每辆汽车的数据点数,您的查询可以使用日期数学计算汽车没有数据点的周数。如果有人在您运行更新后为汽车插入数据会怎样?您最终得到的数据不一致。
答案 1 :(得分:1)
使用您的示例数据我运行了以下
UPDATE tblcar AS c
INNER JOIN tblcar AS previous
ON c.carid = previous.carid
SET c.numwkszeropoints = Iif([previous].[NumWksZeroPoints] = 0, 0,
[previous].[NumWksZeroPoints] + 1)
WHERE c.weekof =#5/28/2011 #
AND previous.weekof =#5/21/2011#;
之后的表格看起来像这样
CarID WeekOf NumDataPoints NumWksZeroPoints
----- ---------- ------------- -----------------
3AA 05/14/2011 23 0
7BB 05/14/2011 9 0
3AA 05/21/2011 35 0
7BB 05/21/2011 0 1
3AA 05/28/2011 24 0
7BB 05/28/2011 0 2
基本上,查询会自我加入回到前一周,如果不是零,则将当前周更新为前一周的值+ 1。