2016-11-15 52 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'