4

如果这甚至可能,我需要根据 DuplicateNo 字段中指示的内容插入/复制记录。为了说明,如果我有这张桌子:

表“客户”:

CustNo      CustName       DuplicateNo
0001        John           2
0002        Smith          3

我需要有一个像这样的输出(新的空表):表'DupliTable:

CustNo      CustName
0001        John
0001        John
0002        Smith
0002        Smith
0002        Smith

感谢人们的精彩想法。我非常感谢你的帮助。

4

2 回答 2

2

在 Access 中,我认为您唯一的选择是编写一些代码来执行此操作。这是一个遍历记录的示例:循环遍历MS Access 中所有记录的代码

于 2012-12-01T17:19:49.977 回答
0

好的,我认为最简单和最快的方法是使用 VBA 使用多个附加查询。下面的代码针对每个 DuplicateNo 运行附加查询 N 次,其中 N = DuplicateNo,然后对 DuplicateNo 字段进行过滤。

因此,它会在复制所有 DuplicateNo = 1 的记录时运行追加查询,在 DuplicateNo = 2 的情况下运行查询两次,依此类推。

追加查询将运行所有唯一 DuplicateNo 值的总和。因此,如果可能的值为 1-4,则查询将运行 10 次。

Sub FillOutputTable()
   Dim RS As Recordset
   Dim strSQL As String
   Dim N As Integer
   Dim I As Integer
   strSQL = ""
   strSQL = strSQL & "SELECT DuplicateNo "
   strSQL = strSQL & "FROM [table-input] "
   strSQL = strSQL & "GROUP BY [table-input].DuplicateNo "
   Set RS = CurrentDb.OpenRecordset(strSQL)
   Do
      N = RS("DuplicateNo")
      For I = 1 To N
         strSQL = ""
         strSQL = strSQL & "INSERT INTO [table-output] ( CustNo, CustName ) "
         strSQL = strSQL & "SELECT [table-input].CustNo, [table-input].CustName "
         strSQL = strSQL & "FROM [table-input] "
         strSQL = strSQL & "WHERE [table-input].DuplicateNo=" & N
         CurrentDb.Execute strSQL
      Next I
      RS.MoveNext
   Loop Until RS.EOF
   RS.Close
   Set RS = Nothing
End Sub
于 2012-12-01T17:19:28.803 回答