Access 2013 - 使用ConcatRelated查询,其中包含50000个条目

时间:2016-01-08 19:09:20

标签: ms-access

我有一个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;

查询生成但现在我想将其作为表导入另一个访问文件。 我试图导出为ex​​cel文件,但即使在2小时后它仍然继续。 我尝试将其转换为表格,并使用

将该表格导入excel或访问文件
INTO NewTable

在上面的查询中,但这也需要很长时间,并且没有显示完成的迹象。

ConcatRelated是来自HERE

的函数

任何帮助都会非常棒! 提前致谢

1 个答案:

答案 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中的主键(不确定它是否有所作为)。