简体   繁体   English

跨多个表聚合SQL查询

[英]Aggregate SQL query across multiple tables

I'm using MS Access 2010. The database has a set of 12 identical equipment tables, one for each of 12 different departments in a company. 我使用的是MS Access2010。该数据库包含一组12个相同的设备表,每个表分别用于公司的12个不​​同部门。 The table tracks actions that need to be taken by folks (resources) who are responsible for the equipment. 该表跟踪负责设备的人员(资源)需要采取的行动。 I have a simple query that counts the number of resources that have various statuses. 我有一个简单的查询,该查询计算具有各种状态的资源的数量。 It looks as follows: 它看起来如下:

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

Each of the tables looks like this: 每个表如下所示:

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)

The query results look like this: 查询结果如下所示:

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

For example, the first row shows that resource 1 has 63 pieces of equipment that are of status 1. The second row shows that resource 2 has 79 pieces of equipment of status 1... and so on. 例如,第一行显示资源1具有状态为1的63个设备。第二行显示资源2具有状态1 ...的79个设备,依此类推。

What I need is an aggregate query that provides company-level totals for all of the resource and status combinations, ie, the exact same result table, except that the status_count column will have significantly larger numbers. 我需要的是一个聚合查询,该查询可为所有资源和状态组合(即完全相同的结果表)提供公司级别的总计,不同之处在于status_count列的数量要大得多。

Thank you for any help you can provide. 感谢您提供任何帮助。

Basically, you can select the count for each dep table in your database , Union them all and then sum them. 基本上,您可以为数据库中的每个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;

If you're able to make schema changes then combine the 12 tables into one table with an extra column for departmentid. 如果您能够进行模式更改,则将12个表合并为一个表,并为Departmentid附加一列。 If you can not make changes to the DB structure perhaps you are allowed to add a new table. 如果您无法更改数据库结构,则可以添加一个新表。 Then you could add a temporary table to capture the results for each table into this temporary results table SELECT...INTO. 然后,您可以添加一个临时表以将每个表的结果捕获到此临时结果表SELECT ... INTO中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM