如何根据数量列将一行拆分为多行
How to split a row into multiple based on a quantity column
在 MS Access 中,我有一个 table 这样的:
TblA_AutoID SKU 数量 价格
1 A3323 2 4.53
2 A3313 1 22.20
3 A3323 3 4.59
我想创建一个新的 table(最好是当新行添加到第一个 table 时自动填充的一个),它将第一个 table 分成每个数量的一行,像这样:
TblB_AutoID TblA_AutoID SKU 价格
1 1 A3323 4.53
2 1 A3323 4.53
3 2 A3313 22.20
4 3 A3323 4.59
5 3 A3323 4.59
6 3 A3323 4.59
我在几台机器上工作,一台使用 Access 2007,一台使用 Access 2013。我猜这需要在 VBA 中完成,但如果有更简单的方法,那更好。
因为此时你想要的只是将 Qty 行数从 的每一行添加到 TableB 中TableA,您可以将每个 table 加载到单独的 DAO.Recordset
中,并使用 TableA 记录集中的数据来驱动对其他记录集的添加。
我在 Access 2010 中使用您的示例数据测试了此代码。它按照您的要求填充 TableB。
Dim db As DAO.Database
Dim rsA As DAO.Recordset
Dim rsB As DAO.Recordset
Dim lngQuantity As Long
Dim i As Long
Set db = CurrentDb
Set rsA = db.OpenRecordset("TableA", dbOpenSnapshot)
Set rsB = db.OpenRecordset("TableB", dbOpenTable, dbAppendOnly)
With rsA
Do While Not .EOF
lngQuantity = !Qty.Value
For i = 1 To lngQuantity
rsB.AddNew
rsB!TblA_AutoID.Value = !TblA_AutoID.Value
rsB!SKU.Value = !SKU.Value
rsB!Price.Value = !Price.Value
rsB.Update
Next ' i
.MoveNext
Loop
End With
rsB.Close
rsA.Close
那部分相当简单。但是,您在评论中表示最终您打算将 TableB 与 TableA 中数据的后续更改(更新和删除)同步。这些和解努力将更具挑战性。
在 MS Access 中,我有一个 table 这样的:
TblA_AutoID SKU 数量 价格
1 A3323 2 4.53
2 A3313 1 22.20
3 A3323 3 4.59
我想创建一个新的 table(最好是当新行添加到第一个 table 时自动填充的一个),它将第一个 table 分成每个数量的一行,像这样:
TblB_AutoID TblA_AutoID SKU 价格
1 1 A3323 4.53
2 1 A3323 4.53
3 2 A3313 22.20
4 3 A3323 4.59
5 3 A3323 4.59
6 3 A3323 4.59
我在几台机器上工作,一台使用 Access 2007,一台使用 Access 2013。我猜这需要在 VBA 中完成,但如果有更简单的方法,那更好。
因为此时你想要的只是将 Qty 行数从 的每一行添加到 TableB 中TableA,您可以将每个 table 加载到单独的 DAO.Recordset
中,并使用 TableA 记录集中的数据来驱动对其他记录集的添加。
我在 Access 2010 中使用您的示例数据测试了此代码。它按照您的要求填充 TableB。
Dim db As DAO.Database
Dim rsA As DAO.Recordset
Dim rsB As DAO.Recordset
Dim lngQuantity As Long
Dim i As Long
Set db = CurrentDb
Set rsA = db.OpenRecordset("TableA", dbOpenSnapshot)
Set rsB = db.OpenRecordset("TableB", dbOpenTable, dbAppendOnly)
With rsA
Do While Not .EOF
lngQuantity = !Qty.Value
For i = 1 To lngQuantity
rsB.AddNew
rsB!TblA_AutoID.Value = !TblA_AutoID.Value
rsB!SKU.Value = !SKU.Value
rsB!Price.Value = !Price.Value
rsB.Update
Next ' i
.MoveNext
Loop
End With
rsB.Close
rsA.Close
那部分相当简单。但是,您在评论中表示最终您打算将 TableB 与 TableA 中数据的后续更改(更新和删除)同步。这些和解努力将更具挑战性。