访问VBA即使没有匹配也会在分组中返回0

时间:2015-08-24 09:39:24

标签: sql vba ms-access-2013

我在访问数据库中有员工表,其中包含他们工作的日期:

表A

employee_id | date_wrk | Project | Worked
-----------------------------------------
1   10      |01.01.2015|Project1 | 1
2   10      |12.01.2015|Project1 | 0,5
3   10      |01.02.2015|Project1 | 1    
4   10      |01.02.2015|Project2 | 1     
5   10      |04.02.2015|Project2 | 1  
6   12      |05.02.2015|Project2 | 1    

我需要的是决赛桌,按月按项目完成天数总和:

employee_id | Month   | Project   | Worked
-----------------------------------------
    10      |January  | Project 1  | 1,5
    10      |February | Project 1  | 1
    10      |February | Project 2  | 2
    10      |March    | Project 1  | 0

我按月(日期)分组,工作天数总和 - 问题是我想显示所有月份jan-dec - 月份和0如果员工在给定项目的某个月没有工作日期..

我尝试建立月份表,列出所有月份,然后加入它,但它没有帮助..

任何想法都会得到满足。

干杯!     .....

2 个答案:

答案 0 :(得分:1)

我尽量避免right join,因为它不必要地混淆。

以下是left join方法的示例:

select  e.employee_id
,       m.month
,       a.project
,       sum(a.worked)
from    (
        select  distinct employee_id
        from    TableA
        ) e
,       MonthsTable m
left join
        TableA a
on      a.employee_id = m.employee_id
        and month(a.date_wrk) = m.month
group by
        e.employee_id
,       m.month
,       a.project

cross join创建每个员工和每个月的矩阵。对于矩阵中的每个员工月组合,它可以选择查找项目时间。

答案 1 :(得分:1)

好的我是基于Andomar建议做的 - 但由于Access不喜欢子查询和交叉连接,我创建了基于以下内容的附加表:

select  distinct employee_id,months.month
from TableA,months

它给了我一个交叉连接表,然后我链接到tableA。

干杯!