sql - 使用来自另一个表的值的总和更新一个表
问题描述
有人可以帮我吗?我想tblTotals
使用from更新Sum
。我有:Cost
tblAppointments
Private Sub btnUpdate_Click()
Dim rs1 As DAO. Recordset
Dim rs2 As DAO. Recordset
Set rs1 = CurrentDB.OpenRecordset("SELECT Pets, Sum(cost) As TotalCost FROM tblAppointments WHERE (((DateDiff('m',[AppointmentDate],DateSerial(Year(Date()),1,1))) Between -6 And 5)) GROUP BY Pets")
Set rs2 = CurrentDB.OpenRecordset("SELECT Pets, TotalCost FROM tblTotals")
With rs1
If Not rs1.BOF then rs1.Movefirst
Do Until r1.EOF
rs2. Edit
rs2.Fields("TotalCost").Value = rs1.Fields("TotalCost").Value
rs2.Update
Set rs1 = Nothing
Set rs2 = Nothing
End With
End Sub
tblTotals
+=========+=========+=============+
+ Pets + Dr + TotalCost +
+=========+=========+=============+
+ Cats + John + £20.00 +
+---------+---------+-------------+
+ Dogs + Sam + £80.00 +
+---------+---------+-------------+
+ Rabits + Ellis + £85.35 +
+---------+---------+-------------+
+ Parrots + Ellis + £63.00 +
+---------+---------+-------------+`
tblAppointments:
+=========+=========+=============+=================+
+ Pets + Dr + Cost + AppointmentDate +
+=========+=========+=============+==================
+ Cats + John + 20.50 + 12/02/2020 +
+---------+---------+-------------+-----------------+
+ Dogs + Sam + 80.00 + 10/05/2020 +
+---------+---------+-------------+-----------------+
+ Dogs + Sam + 80.00 + 12/02/2020 +
+---------+---------+-------------+-----------------+
+ Rabits + Ellis + £85.35 + 12/12/2019 +
+---------+---------+-------------+-----------------+
+ Cats + John + 20.50 + 12/10/2019 +
+---------+---------+-------------+-----------------+
+ Cats + John + 20.50 + 12/09/2019 +
+---------+---------+-------------+-----------------+
+ Parrots + Ellis + £63.25 + 12/08/2019 +
+---------+---------+-------------+-----------------+`
预期成绩:
tblTotals
+=========+=========+=============+
+ Pets + Dr + TotalCost +
+=========+=========+=============+
+ Cats + John + £61.50 +
+---------+---------+-------------+
+ Dogs + Sam + £160.00 +
+---------+---------+-------------+
+ Rabits + Ellis + £85.35 +
+---------+---------+-------------+
+ Parrots + Ellis + £63.00 +
+---------+---------+-------------+
谢谢。
解决方案
有时您别无选择,只能尝试提出解决方案,尽管设计不佳。在这种情况下。我曾经DAO
使用Update
tblTotals
聚合查询作为recordset
. 只要所讨论的表的大小相当小,您就不会注意到任何重大的速度问题。
Private Sub btnUpdate_Click()
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Set rs1 = CurrentDB.OpenRecordset("SELECT Pets, Sum(Cost) As TotalCost FROM tblAppointments WHERE (((DateDiff('m',[AppointmentDate],DateSerial(Year(Date()),1,1))) Between -6 And 5)) GROUP BY Pets")
Set rs2 = CurrentDB.OpenRecordset("SELECT Pets, TotalCost FROM tblTotals")
rs1.MoveFirst
Do Until rs1.EOF
rs2.MoveFirst
Do Until rs2.EOF
If rs1![Pets] = rs2![Pets] Then
rs2.Edit
rs2.Fields("TotalCost").Value = rs1.Fields("TotalCost").Value
rs2.Update
End If
rs2.MoveNext
Loop
rs1.MoveNext
Loop
rs1.Close
rs2.Close
Set rs1 = Nothing
Set rs2 = Nothing
End Sub
推荐阅读
- javascript - 您可以将 getstream.io js 客户端与 react native 一起使用而不是 react-native-activity-feed 吗?
- android - 我可以在 Play 商店中以替代名称引用应用程序吗
- r - 根据其他列的条件标记列中连续出现的值
- powershell - PowerShell 脚本不从 TaskScheduler 运行
- typescript - VS Code 文档符号提供程序增量刷新
- sql-server - 删除其他表引用的列
- conv-neural-network - 如何从 ROM(实际上是 FPGA 中的 BlockRAM)中获取系数以用于矩阵乘法?
- lex - 如何检查数字是否超出指定的六进制范围?
- maven - 通过控制台使用 JIB 和动态参数创建图像泊坞窗
- mysql - 如何将所有 sql 文件的 sql 命令执行到 MySQL 数据库中?