2016-11-15 4 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またはsalesサブクエリーの場合、行は除外されます。私が望むのは、結果が0かnullを返すことです。

どのような考えですか?

答えて

0

あなただけの外部結合がある場合に指定する必要があるようだ、とどこがINNERが

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' 
に参加行っています