【发布时间】:2012-08-16 14:18:07
【问题描述】:
为了更好地说明我的示例,这通常是我正在寻找的东西:
这就是我要开始的:
Column 1 | Column 2
-------------------
A | 1
B | 2
A | 3
我想以以下任一结尾:
1) 这样比较可取,因为表中的数据会更少,但绝对没有必要
Column 1 | Column 2
-------------------
A | 3
B | 2
2)
Column 1 | Column 2
-------------------
A | 3
B | 2
A | 3
所以为了解释得更清楚一点,我有一个表格,里面有一堆数据。用户可以随时导入数据。问题是偶尔会更新一些条目。在这种情况下,我需要使用最后添加的数据状态来更新表中的所有条目。例如,如果最初 A 的值为 1,而表后来更新为 A 的值为 3 的条目,我需要更新整个表以显示 A 的值仅为 3。
此外,虽然我知道如何在查询中执行此操作,但我需要能够在表上执行此操作。现在我想到了几个想法,但似乎没有一个可行。我尝试了一个更新查询:
"UPDATE tblData SET column2 = Last(Column2) GROUP BY Column1"
但这似乎并没有真正起作用。我也试过:
"UPDATE tblData Set Column2 = DLast('Column2', 'tblData')"
更接近。但是,它正在使用最后一条记录更新所有条目,如下所示:
Column 1 | Column 2
-------------------
A | 3
B | 3
A | 3
我猜这是因为没有“GROUP BY”子句告诉它只对 Column1 的每个实例执行此操作,但通过研究,您似乎无法将“GROUP BY”放入“更新”声明。我应该如何处理才能获得我想要的结果?
编辑:此外,虽然我对此不是 100% 确定,但我认为解决此问题的方法是使用 DLast 的第三个可选参数,即 [criteria] 参数。我能想到的唯一方法是为 Column1 指定一个确切的值,这就是为什么我不确定如何在这里使用它,但我觉得必须有一种方法来操纵它以应用于每个单独的值第 1 列。
【问题讨论】:
-
DLast()取决于行的顺序;如果没有明确定义排序,DLast()是不可靠的。tblData是一个无序的数据包。数据库引擎不知道添加的“最后”行是哪一行。它不像 Excel 电子表格。您需要告诉数据库引擎如何确定行的顺序……date_added字段可以做到。 -
嘿,我不确定您的评论去了哪里,但我正要正确标记它。你的回答有点奏效。我使用 DLast() 而不是 DMax(),并且必须将内部撇号更改为 chr(34)。你确定 DLast() 不知道最后一行是什么吗?由于我不订购它,我的印象是它默认使用表格底部(即最近添加的数据)。我已经尝试了几次测试,到目前为止它正在工作,但我可能会忽略一些东西。你能给我一个它不起作用的例子吗?
标签: sql ms-access vba ms-access-2007