2016-11-15 55 views
0

我有一个数据的问题被排除在我的查询结果 -SQL Server查询 - 缺少数据

select 
    D.[Date], D.MonthName, D.WeekOfYear, 
    E.bu_name, E.emp_mgr, E.emp_sup, E.emp_name, E.emp_jde, 
    C.Calls, S.sales 
from 
    DATE TABLE As D 
join 
    (Select 
     cast([start_date] as date) as call_date, [agent_no], 
     sum(case when [skill_name] like '5700 Sales l%' and [Agent_Time] != '0' then 1 else 0 end) as calls 
    from 
     CALL TABLE 
    group by 
     cast([start_date] as date), [agent_no]) As C on D.[Date] = C.call_date 
join 
    (Select 
     [AC#DTE_dt] As sale_date, [EMPJDENUM], 
     sum(case when [CH]='I' and ([IC]='L' or [IC]='H') and [ITMQTY]>3 and [EMPBUNCOD] in ('5044', '5077', '5169', '5178', '5179', '5186', '5187', '5189', '5190') then 1 else 0 end) as sales 
    from 
     SALE TABLE 
    group by 
     [AC#DTE_dt], [EMPJDENUM]) As S on D.Date = s.sale_date 
join 
    EMPLOYEE TABLE As E on C.[agent_no] = E.[emp_vcc] 
         and S.[EMPJDENUM] = E.emp_jde 
         and S.sale_date between E.start_date and E.end_date 
where 
    D.[Date] = '11/5/2016' 

结果

enter image description here

如果双方通话或销售子查询表中有与查询底部的Employee表上的联接中定义的employees表的匹配 - 总和(将返回的情况)。如果由于某种原因没有数据在ca中结合ll或销售子查询中,该行被排除。我想要的是结果返回0或null。

有什么想法?

回答

0

看来你只需要指定当有外连接,并在那里你正在做一个内部联接

select 
    D.[Date], D.MonthName, D.WeekOfYear, 
    E.bu_name, E.emp_mgr, E.emp_sup, E.emp_name, E.emp_jde, 
    C.Calls, S.sales 
    from 
    DATE TABLE As D 
LEFT OUTER join 
    (Select 
    cast([start_date] as date) as call_date, [agent_no], 
    sum(case when [skill_name] like '5700 Sales l%' and [Agent_Time] != '0' then 1 else 0 end) as calls 
from 
    CALL TABLE 
group by 
    cast([start_date] as date), [agent_no]) As C on D.[Date] = C.call_date 
LEFT OUTER join 
    (Select 
    [AC#DTE_dt] As sale_date, [EMPJDENUM], 
    sum(case when [CH]='I' and ([IC]='L' or [IC]='H') and [ITMQTY]>3 and [EMPBUNCOD] in ('5044', '5077', '5169', '5178', '5179', '5186', '5187', '5189', '5190') then 1 else 0 end) as sales 
from 
    SALE TABLE 
group by 
    [AC#DTE_dt], [EMPJDENUM]) As S on D.Date = s.sale_date 
INNER join 
EMPLOYEE TABLE As E on C.[agent_no] = E.[emp_vcc] 
        and S.[EMPJDENUM] = E.emp_jde 
        and S.sale_date between E.start_date and E.end_date 
where 
D.[Date] = '11/5/2016'