我有一个包含两个表的数据库。 (每个表中有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 Table1
和SELECT * FROM Table2 WHERE REPORT = "a"
以及查询2的SELECT * FROM Table1
和SELECT * FROM Table2 WHERE REPORT = "b"
一样
但我必须为超过一千个报告名称这样做。
答案 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
您必须使用您的表格和字段名称,但这应该为您提供您需要做的基本知识。