将记录分组并放入访问的不同表中

时间:2015-04-02 14:51:23

标签: ms-access access-vba

我有一个包含两个表的数据库。 (每个表中有5,034,139和3,297,127行)在这些表中有报告名称(~1000个不同的报告)和日志日期。我想为每个报告名称创建新表,每个表应包含报告的日志日期。

我们假设只有两份报告" a"和" b"。报告的日志日期" a"是2014年1月1日,03.04.2014和05.06.2014。报告的日志日期" b"是04.07.2013,06.08.2014和02.03.2014。

我想创建两个表/查询。在一个表/查询中,应该只报告日志日期,而在另一个表中应该只有报告b的日志日期。与查询1的SELECT * FROM Table1SELECT * FROM Table2 WHERE REPORT = "a"以及查询2的SELECT * FROM Table1SELECT * FROM Table2 WHERE REPORT = "b"一样 但我必须为超过一千个报告名称这样做。

1 个答案:

答案 0 :(得分:0)

好的 - 这实际上有点复杂,但你要做的是创建一个循环,通过报告名称(获取名称来创建表)循环记录然后执行选择进入以创建包含每个报告记录的新表。

你应该得到类似的东西:

Dim rs As DAO.Recordset
Dim strSQL as string
Dim ReportName as string

Set rs = CurrentDb.OpenRecordset("SELECT DISTINCT ReportName FROM TABLE1 UNION SELECT DISTINCT ReportName FROM TABLE2 ")

docmd.SetWarnings false

If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst 'Unnecessary in this case, but still a good habit
    Do Until rs.EOF = True

        ReportName = rs("ReportName") 'GET THE REPORTNAME

        strSQL="SELECT LogDates INTO " & ReportName & _
        "FROM (SELECT LogDates FROM Table1 " & _
        "WHERE ReportName = '" & ReportName & "' " & 
        "UNION "
        "SELECT LogDates FROM Table1 " & _
        "WHERE ReportName = '" & ReportName & "') " & 

        DoCmd.RunSql strSQL
        Docmd.setwarnings True

        'Move to the next record. Don't ever forget to do this.
        rs.MoveNext
    Loop
Else
    MsgBox "There are no records in the recordset."
End If

MsgBox "Finished looping through records."

rs.Close 'Close the recordset
Set rs = Nothing 'Clean up

您必须使用您的表格和字段名称,但这应该为您提供您需要做的基本知识。