4

これが可能である場合でも、DuplicateNoフィールドに示されている内容に基づいてレコードを挿入/複製する必要があります。説明のために、私がこのテーブルを持っている場合:

テーブル'顧客':

CustNo      CustName       DuplicateNo
0001        John           2
0002        Smith          3

次のような出力(新しい空のテーブル)が必要です。Table'DupliTable:

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

素晴らしいアイデアの人々に感謝します。よろしくお願いします。

4

2 に答える 2

2

Accessでは、これを行うためのコードを書くしか選択肢がないと思います。レコードを反復処理するサンプルを次に示します。MSAccessのすべてのレコードをループするコード

于 2012-12-01T17:19:49.977 に答える
0

OK、最も簡単で最速の方法は、VBAを使用して複数の追加クエリを使用することだと思います。以下のコードは、DuplicateNoごとに追加クエリをN回実行します。ここで、N = DuplicateNoであり、DuplicateNoフィールドでフィルタリングします。

したがって、DuplicateNo = 1の場合はすべてのレコードをコピーして1回追加クエリを実行し、DuplicateNo=2の場合はクエリを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 に答える