我是Access的初学者。我有一个路由表,其中包括一个电缆托架列表,以及贯穿这些托盘的电缆。数据样本如下:
tray Usable Area cable Total Cable Area (mm^2)
CM1001 25000 1-3/C-00AWG-Cu-TECK 660.19
CM1001 25000 1-3/C-4AWG-Cu-TECK 572.27
CM1001 25000 1-3/C-14AWG-Cu-TECK 490.63
TC-100D.2 15600 1-3/C-750AWG-Al-TECK 1,017.36
TM-001.7B 72000 1-3/C-750AWG-Al-TECK 1,017.36
TM-001A.1 10000 1-3/C-750AWG-Al-TECK 1,017.36
TM-001A.2 90000 1-3/C-8AWG-Cu-TECK 530.66
TM-001A.3 90000 1-3/C-750AWG-Al-TECK 1,017.36
托盘字段包含唯一值和重复值。重复值被认为是单个托盘,只有多种类型的电缆穿过它(在电缆列中)。 我的目标是总计单个托盘的总电缆面积,即使该托盘实际上是多个重复的条目。例如,托盘CM1001的总电缆面积为1723.06mm²,TM-001A.1为1017.36mm²,TM-001A.2为530.66mm²。然后,我将比较总电缆面积与托盘的可用区域,以查看托盘是否已满。
我的问题是:是否有某种简单的Access查询我可以运行以总结“电缆总区域”列中的值,如果有重复的“托盘”行,但只显示总电缆面积中的值是托盘是一个独特的行?创建此新查询时,可用区域和电缆字段最终并不重要。理想情况下,我的新查询看起来像:
tray Total Cable Area (mm^2)
CM1001 1,723.06
TC-100D.2 1,017.36
TM-001.7B 1,017.36
TM-001A.1 1,017.36
TM-001A.2 530.66
TM-001A.3 1,017.36
如果没有某种我根本不知道的通用查询类型,您是否愿意提供一些关于如何使用VBA实现此目的的起点?我熟悉VBA,而不是Access。
非常感谢你!
答案 0 :(得分:0)
您需要选择 tray
列,Sum
Total Cable Area (mm^2)
和组 tray
SELECT [Total Cable Area (mm^2)], SUM([tray]) AS [tray]
FROM [MyTable]
GROUP BY [Total Cable Area (mm^2)]
答案 1 :(得分:0)
我在VBA中编写了一个解决方案,但它将结果写入另一个表,这可能不是正确的形式。如果将来有人想要它,我会在下面加入它,但Mat的解决方案肯定更好。
Sub sum_duplicate_trays()
Dim rs_qry As DAO.Recordset
Dim rs_fill As DAO.Recordset
Set rs_qry = CurrentDb.OpenRecordset("qryCable_Area")
Set rs_fill = CurrentDb.OpenRecordset("tblTray_Fill")
'deletes contents on tblTray_Fill, since it will be replaced below.
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM tblTray_Fill"
DoCmd.SetWarnings True
If Not (rs_qry.EOF And rs_qry.BOF) Then
rs_qry.MoveFirst
Do Until rs_qry.EOF = True
'sees if current tray already exists in Fill table (which contains only uniques)
rs_fill.Index = "tray"
rs_fill.Seek "=", rs_qry!tray
If rs_fill.NoMatch Then
rs_fill.AddNew
rs_fill!tray = rs_qry!tray
rs_fill!cable_area = rs_qry![Total Cable Area (mm^2)]
rs_fill.Update
Else 'already existing
rs_fill.Edit
rs_fill!cable_area = rs_fill!cable_area + rs_qry![Total Cable Area (mm^2)]
rs_fill.Update
End If
rs_qry.MoveNext
Loop
Else
MsgBox "Error: the Cable Area query is empty."
End If
End Sub