MS Access SQL:不要包含在计数

时间:2015-09-24 02:52:30

标签: sql ms-access count

背景:这是针对假想的汽车租赁公司。这个问题涉及两个表。他们被称为员工表'和'销售人员表'。第一个表包括有关DOB等工作人员的信息。第二个表包含以下信息:

enter image description here

Staff_ID =工作人员的唯一代码 Sale_ID =特定销售的唯一代码 SaleStaffMember_AssociatedWithPurchase =工作人员是否参与了最初的销售或仅仅归还了汽车。

这两个表具有相同的Staff_ID。

我写了以下SQL:

SELECT [staff table].staff_id as [Staff ID], Count([sale staff member table].staff_id) AS [Number of Rentals]
FROM [staff table]
LEFT JOIN [sale staff member table] ON [sale staff member table].staff_id = [staff table].staff_id
WHERE [sale staff member table].staff_id IS NULL or [sale staff member table].staff_id IS NOT NULL
GROUP BY [staff table].staff_id

这样做是因为它列出了每个工作人员(一些工作人员没有进行任何销售,因此不在销售人员表中),在他们旁边列出了他们的销售额:

enter image description here

我的问题是,这里指出的工作人员在技术上没有进行任何销售,但是当他应该有0时,他被列为已经做了1。我明白为什么,因为我没有写任何关于与购买领域相关的信息在SQL中。我试过这样做,我能得到的最远的就是从查询结果中删除该成员。但是,我想要做的就是说:

'如果工作人员与购买无关,请不要在计数中包含此特定条目'

但我不知道该怎么做。我尝试了一些荒谬的解决方案并查看了这个,但我最终找不到解决方案。我确定它相对简单,但我过去几天才拿起SQL,所以我还不知道。

编辑:刚刚意识到我的where语句字面上什么也没做什么哈哈,但这并没有解决任何问题,只是让代码更整洁:

我修改后的代码:

SELECT [staff table].staff_id as [Staff ID], Count([sale staff member table].staff_id) AS [Number of Rentals]
FROM [staff table]
LEFT JOIN [sale staff member table] ON [sale staff member table].staff_id = [staff table].staff_id
GROUP BY [staff table].staff_id

谢谢!

编辑:最终答案

SELECT [Staff Table].Staff_ID AS [Staff ID], SSM.[Number of Rentals] AS [Number of Rentals]
FROM [staff table] 
LEFT JOIN (SELECT Staff_ID, nz(COUNT(Staff_ID),0) as [Number of Rentals] 
FROM [Sale Staff Member Table] 
WHERE SaleStaffMember_AssociatedWithPurchase = 1
GROUP BY Staff_ID) AS SSM
ON [Staff Table].Staff_ID = SSM.Staff_ID

2 个答案:

答案 0 :(得分:1)

据我了解您的问题,如果您只是寻找相关购买的员工,那么您可以简单地执行此查询:

SELECT s.staff_id AS [Staff Id], COALESCE(ssm.NoOfRentals,0) AS [Number of Rentals]
FROM [staff table] AS s 
LEFT JOIN (SELECT staff_id, COUNT(staff_id) as NoOfRentals 
FROM [sale staff member table] 
WHERE SaleStaffMember_AssociatedWithPurchase = 1
GROUP BY staff_id) AS ssm
ON s.staff_id = ssm.staff_id
如果我错了,请纠正我。

答案 1 :(得分:0)

在初始查询中添加一个类似

的字段
Sales:sum (iif(SaleStaffMember_AssociatedWithPurchase = 1,1,0))

这将使每个工作人员都留在结果中,并总结他们与之相关的销售数量。