使用多个表访问SQL Join和Count查询

时间:2018-03-18 19:44:12

标签: sql ms-access

情境:

我有2个表,Car Table和Employee Table。非常简单的表,但是两个表都包含位置代码:

╔════════════════╗    ╔═══════════╗
║ Employee Table ║    ║ Car Table ║
╠════════════════╣    ╠═══════════╣
║ empID          ║    ║ CarID     ║
║ empName        ║    ║ CarName   ║
║ LocID          ║    ║ LocID     ║
╚════════════════╝    ╚═══════════╝

这是为了代表在特定地点工作的员工,并且还显示哪些车辆位于相应的位置。

我尝试使用此查询显示的是每辆车的计数,以及员工GROUPED BY位置ID,例如:

Example of what I want

每次尝试查询时,它总是在查询中添加多个位置ID,即使我想按它进行分组。这可以用一个查询吗?

2 个答案:

答案 0 :(得分:3)

select e.LocId, EmpCount, CarCount
from
    (select LocId, count(*) as EmpCount from Employee group by LocId) as e
    inner join
    (select LocId, count(*) as CarCount from Car group by LocId) as c
        on c.LocId = e.LocId

这是一般性的想法,虽然我不认为这是Access的完美语法,因为我确信它必须在某处丢失一对括号。由于您有多对多关系,因此在加入之前您需要能够折叠成一行。

我还假设每个位置都由员工和汽车代表。如果这不是完全正确的话,也许你可以通过左外连接逃脱。由于我认为Access不允许完全外连接,如果你不能按照这些方式做出假设,你将需要另一种解决方法。

使用count(distinct)也可能有用,但我认为如果表格很大,使用上述方法会更快。

select e.LocId, count(distinct e.EmpId) as EmpCount, count(distinct c.CarId) as CarCount
from Employee as e inner join Car as c on c.LocId = e.LocId

答案 1 :(得分:0)

试试这个:

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

    		<h2>To Do</h2>
    		<form name="checkListForm">
    			<input type="text" name="checkListItem"/>
    		</form>
    		<div class="button">Add</div>
    		<br>
    		<div class="list"></div>