2016-01-08 71 views
0

我通過連接類似的條目訪問2013 - 查詢包含ConcatRelated 50000項到永遠

SELECT Users, ConcatRelated("Locations", "Report", "Users = '" & 
Report.Users & "' AND Roles = '" & Report.Roles & "'") AS NewLocation, Roles 
FROM Report 
GROUP BY Users, Roles; 

查詢生成,但有一個SQL查詢,下面我有一個錶轉換含60萬個條目50000項3列現在我想將它作爲一個表導入另一個訪問文件。 我試圖導出爲ex​​cel文件,但即使在2小時後它仍然繼續。 我試圖通過使用

INTO NewTable 
在上面的查詢

將其轉換成一個表,導入表到Excel或Access文件,但也花費很長的時間,並沒有顯示出結束的跡象。

ConcatRelated是HERE

函數任何幫助將是真正偉大的! 在此先感謝

+0

您的查詢不可能是正確的,它必須是「GROUP BY Users,Roles'? – Andre

+0

如果以上情況屬實,則應首先進行分組(INSERT INTO臨時表),然後對結果運行ConcatRelated。 – Andre

+0

當使用group by子句時,select將具有sum,min,max,avg,first,last之類的集合函數或group by子句中的字段之一。由於您在select中使用兩個字段而沒有任何聚合函數,即用戶,NewLocation,您的查詢將會出錯。如果你想讓group by做正確的字段名或者根據這個結果做另一個查詢。如果查詢得到糾正,我不會在將50k記錄插入新表中時遇到任何問題。 –

回答

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中的主鍵(不確定它是否有所不同)。

+0

非常感謝!一秒鐘9個小時! –