2016-01-17 135 views
1

我正在使用MS Access 2010.數據庫有一組12個相同的設備表,每個公司有12個不同的部門。該表跟蹤負責設備的人員(資源)需要採取的操作。我有一個簡單的查詢來計算具有各種狀態的資源數量。它看起來如下:跨多個表的聚合SQL查詢

SELECT dept1.actions.resource, dept1.action.status, Count(*) AS status_count 
FROM dept1.action 
GROUP BY dept1.action.status, dept1.action.resource; 

每個表看起來是這樣的:

equip_id, text 
resource, number (id of the resource who is responsible for the equipment) 
status, number (id of the status of the action that the resource needs to do) 

查詢結果是這樣的:

resource status status_count 
1   1  63 
2   1  79 
5   1  16 
6   1  3 
0   3  1 
1   3  1180 
2   3  64 
3   3  61 
5   3  1 
6   3  2 
7   3  12 
0   4  4 

例如,第一行顯示的是資源1有63件狀態爲1的設備。第二行顯示資源2有79件狀態爲1的設備......等等。

我需要的是一個聚合查詢,它爲所有資源和狀態組合提供公司級總計,即完全相同的結果表,只是status_count列的數字要大得多。

感謝您提供任何幫助。

+0

這是MS Access中的一個疑難問題。你應該將12個表合併成一個。通常,具有相同結構的多個表格表明數據庫設計存在問題。 –

回答

1

基本上,您可以選擇數據庫中每個dep表的計數,將它們全部合併,然後求和它們。

SELECT resource,status,sum(status_count) as status_company_count from(
SELECT dept1.actions.resource, dept1.action.status, Count(*) AS status_count 
FROM dept1.action 
GROUP BY dept1.action.status, dept1.action.resource 
UNION 
SELECT dept2.actions.resource, dept2.action.status, Count(*) AS status_count 
FROM dept2.action 
GROUP BY dept2.action.status, dept2.action.resource 
UNION 
SELECT dept3.actions.resource, dept3.action.status, Count(*) AS status_count 
FROM dept3.action 
GROUP BY dept3.action.status, dept3.action.resource 
.....) 
group by resource,status; 
+0

這在MS Access中不起作用。 –

+0

只需調整語法即可。 Access使用'UNION'。 – Grantly

+0

很好,@sagi。非常感謝你。那就是訣竅。 – bcrimmins

1

如果您能夠進行模式更改,那麼將12個表合併爲一個表,並附加一個額外的列以供隔離。如果你不能修改數據庫結構,也許你可以添加一個新表。然後,您可以添加一個臨時表以將每個表的結果捕獲到此臨時結果表SELECT ... INTO中。

+0

感謝您的建議,但架構已設置。 – bcrimmins

+0

重新審視@ majodi的建議。您應該在良好的數據庫設計中規範化數據。相同的表格需要太多的對象來維護和複雜的查詢。 MS Access是一個文件級數據庫(與服務器級企業RDMS不同)和快速開發工具,允許快速調整。而且由於表格結構是相同的形式/報告只需要一個'WHERE'子句由detamentid。 – Parfait

+0

謝謝@parfait。我知道了。但實際上,Access只是通向SQL Server的一個短暫停靠點。原來的應用程序是用Access編寫的(前端和後端),最終將升級到SQL Server。但是這個應用程序和模式是一場災難,這是我在25年裏看到的最糟糕的一次。沒有可能的方式遷移到SQL Server處於它所處的狀態。因此,我們必須首先獲取應用程序並在Access中整理架構。我們最終丟棄了超過50%的應用程序和數據庫對象。一旦系統在Access中穩定後,我們將把後端遷移到SQL Server。 – bcrimmins