2016-01-17 137 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