SQL通过基于计数器复制来插入记录

时间:2012-12-01 14:05:28

标签: sql ms-access insert duplicates

如果这是可能的,我需要根据DuplicateNo字段中指示的内容插入/复制记录。举例说明,如果我有这张表:

表'客户':

CustNo      CustName       DuplicateNo
0001        John           2
0002        Smith          3

我需要一个输出(新的空表),如下所示: 表' DupliTable:

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

感谢人们的精彩创意。非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

在Access中我认为你唯一的选择就是写一些代码来做到这一点。以下是迭代记录的示例:Code to loop through all records in MS Access

答案 1 :(得分: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