我已经为此努力了几个小时。我正在尝试更新具有相同“ SHORT#”的所有值。如果“ SHORT#”位于 017_PolWpart2 中,则我希望它是更新 017_WithdrawalsYTD_changelater中相应的“ SHORT#”的值。此更新查询仅显示零,但实际上这些值非零。
所以说 017_WithdrawalsYTD_changelater 看起来像这样:
SHORT# WithdrawalsYTD
1 0
2 0
3 0
4 0
5 0
和 017_PolWpart2 看起来像这样:
SHORT# Sum_MTD_AGG
3 50
5 12
我想要这个:
SHORT# WithdrawalsYTD
1 0
2 0
3 50
4 0
5 12
但是我明白了:
SHORT# WithdrawalsYTD
1 0
2 0
3 0
4 0
5 0
我在下面的查询中附加了SQL。
谢谢!
UPDATE 017_WithdrawalsYTD_changelater
INNER JOIN 017b_PolWpart2 ON [017_WithdrawalsYTD_changelater].[SHORT#] =
[017b_PolWpart2].[SHORT#]
SET [017_WithdrawalsYTD_changelater].WithdrawalsYTD = [017b_PolWpart2].[Sum_MTD_AGG];
编辑: 由于我必须即时汇总,因此我尝试这样做。仍然摆脱各种错误。请注意,表 17a_PolicyWithdrawalMatch 的格式为:
SHORT# MTG_AGG WithdrawalPeriod PolDurY
1 3 1 1
1 5 1 0
2 2 1 1
2 22 1 1
所以我汇总:
SHORT# MTG_AGG
1 3
2 24
并将这些汇总值放在 017_WithdrawalsYTD_changelater 中。
我试图这样:
SELECT [017a_PolicyWithdrawalMatch].[SHORT#], Sum([017a_PolicyWithdrawalMatch].MTD_AGG) AS Sum_MTD_AGG
WHERE ((([017a_PolicyWithdrawalMatch].WithdrawalPeriod)=[017a_PolicyWithdrawalMatch].[PolDurY]))
GROUP BY [017a_PolicyWithdrawalMatch].[SHORT#]
UPDATE 017_WithdrawalsYTD_changelater INNER JOIN 017a_PolicyWithdrawalMatch ON [017_WithdrawalsYTD_changelater].[SHORT#] = [017a_PolicyWithdrawalMatch].[SHORT#] SET 017_WithdrawalsYTD_changelater.WithdrawalsYTD =Sum_MTD_AGG;
我没有运气...我被告知SELECT语句使用保留字...:(
答案 0 :(得分:1)
请考虑一下@ June7的注释,以避免在表中使用聚合数据,因为它会冗余地使用存储资源,因为此类数据可以轻松地实时查询。另外,由于这些合计值保存在静态表中,因此它们立即成为历史数据。
在MS Access中,更新查询必须源自不是聚合查询(read-only类型)的可更新对象。因此,它们不能在int main(){
for(int i=0;i<n;i++){
array[50];
}
}
语句中使用。
但是,如果确实需要存储汇总数据,请考虑在UPDATE
内使用domain functions,例如DSUM
。下面假设 SHORT#是一个字符串列。
UPDATE
尽管如此,仍可以查询合计值并将其刷新为当前值。另外,请注意使用表别名来减少长表名的长度:
UPDATE [017_WithdrawalsYTD_changelater] c
SET c.WithdrawalsYTD = DSUM("MTD_AGG", "[017a_PolicyWithdrawalMatch]",
"[SHORT#] = '" & c.[SHORT#] & "' AND WithdrawalPeriod = [PolDurY]")