我有一个SQL查询,我在下面通过连接相似的条目将包含600000个条目的3列转换为50000个条目
SELECT Users, ConcatRelated("Locations", "Report", "Users = '" &
Report.Users & "' AND Roles = '" & Report.Roles & "'") AS NewLocation, Roles
FROM Report
GROUP BY Users, Roles;
查询生成但现在我想将其作为表导入另一个访问文件。 我试图导出为excel文件,但即使在2小时后它仍然继续。 我尝试将其转换为表格,并使用
将该表格导入excel或访问文件INTO NewTable
在上面的查询中,但这也需要很长时间,并且没有显示完成的迹象。
ConcatRelated是来自HERE
的函数任何帮助都会非常棒! 提前致谢
答案 0 :(得分:3)
ConcatRelated
不是一个便宜的功能。它必须打开并循环每个调用的记录集。
目前,您在Report
表中为每个记录调用它,但每个用户只需执行一次。作用。
所以:首先使用INSERT或SELECT INTO临时表进行分组:
SELECT Users, Roles
INTO TempUsersRoles
FROM Report
GROUP BY Users, Roles
然后基于临时表中的记录ConcatRelated
:
SELECT Users,
ConcatRelated("Locations", "Report",
"Users = '" & t.Users & "' AND Roles = '" & t.Roles & "'") AS NewLocation,
Roles
FROM TempUsersRoles AS t
它可能仍会运行一段时间(取决于有多少不同的用户+角色),但应该比以前好多了。
(编辑:你告诉我们,50k对600k,所以它的运行速度至少要快12倍。)
在Report
中的用户+角色上添加索引可能有助于加快功能。
用户+角色也应该是TempUsersRoles
中的主键(不确定它是否有所作为)。