2012-12-01 65 views
4

如果這甚至可能,我需要根據DuplicateNo字段中指示的內容插入/重複記錄。要說明,如果我有這個表:SQL通過基於計數器的複製插入記錄

表 '客戶':

CustNo  CustName  DuplicateNo 
0001  John   2 
0002  Smith   3 

我需要有一個這樣的輸出(新的空表): 表「DupliTable:

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

感謝您的奇妙想法的人。我非常感謝你的幫助。

+0

是否存在某種不能使用循環的約束? – EvilTeach

+2

你正在使用哪個db? –

+0

沒有限制。只要我能得到像所說明的那樣的輸出。 – dualdeath

回答

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