Я пытаюсь объединить 4 разные таблицы, используя полные внешние объединения.Таблица 1 (календарь) содержит только даты.Таблица 2 (данные о вызовах) объединяет календарную дату и дату в таблице 2 с другими данными, касающимися вызовов.Таблица 3 (валовые продажи) объединяет даты с таблицами 1 и датами в таблице 2 с другими соответствующими данными.Таблица 4 (оплаченные продажи) также объединяет дату с таблицей 1 и датами таблицы 2 с другими связанными данными.
Меня беспокоит, что я пропускаю все нулевые значения из таблицы 2. Например, таблицы 3 и 4будут иметь данные о продажах, но таблица 2 не будет иметь те же данные о продажах и вызовах, потому что эта конкретная продажа была сделана онлайн (никаких вызовов не было) - поэтому с моими полными внешними объединениями я ожидал получить дополнительные строки из таблицы 3 и таблицы 4, следовательно,Я надеялся, что мои полные внешние соединения поймают их, но они этого не делают!Я ударил кирпичную стену с этим.Пример ниже:
cal_date manager TID user_signups paid_sales Calls
------------------------------------------------------------------------------------------
6/1/2018 Online - PPC Social Facebook 4850 2 2 4
6/1/2018 Online - PPC Social Facebook 30355 1 1 1
6/1/2018 Online - PPC Social Facebook 31719 1 1 1
6/1/2018 Online - PPC Social Facebook 31717 1 NULL 1
6/1/2018 Online - PPC Social Facebook 31709 1 1 NULL
Последняя строка выше, где есть информация о продажах, но NULL, информация о вызовах - это то, что я хочу, но я не получаю ее в своих результатах.
Есть мысли?Ниже приведен запрос:
declare @beg_date datetime
declare @end_date datetime
select @beg_date='2018-06-01'
select @end_date= dateadd(day, -1, convert(date, current_timestamp))
--Table 1--
select c.cal_date,coalesce(s.manager,p.manager,m.Department) as manager, coalesce (s.campaign,p.campaign,m.aid) as TID, s.Retainer_Type,s.retainer_TUCT,s.user_signups,p.paid_sales,m.handles,m.volume,m.arrivals,m.total_abandons
from reporting.dbo.calendar c
--Table 2--------
full outer join
(select cdv.row_date,
vdns.Department,
vdns.aid,
sum(cdv.acdcalls) handles
,sum(cdv.acdcalls)+sum(cdv.abnquecalls)+sum(cdv.abnringcalls) volume, sum(cdv.i_arrived) arrivals, sum(cdv.abncalls) total_abandons
from CMS.dbo.dvdn cdv
left outer join (
select vdn,
case when CHARINDEX('.',tid)=0 then tid else left(tid,charindex('.',tid)-1) end aid,
wtc.manager Department
from AUSTRIA.cteam.tbl_phonenumbers ctp
left join AUSTRIA.www_lexingtonlaw_com.tbl_campaigns wtc on case when CHARINDEX('.',ctp.tid)=0 then ctp.tid else left(ctp.tid,charindex('.',ctp.tid)-1) end=wtc.id
where (case when CHARINDEX('.',tid)=0 then tid else left(tid,charindex('.',tid)-1) end<5000 or case when CHARINDEX('.',tid)=0 then tid else left(tid,charindex('.',tid)-1) end>=30000)
and case when CHARINDEX('.',tid)=0 then tid else left(tid,charindex('.',tid)-1) end<>0
and vdn<>0
and vdn is not null
and active=1
and wtc.manager like 'Online - PPC%'
union
select vdn, assigned_campaign aid, wtc.manager Department
from AUSTRIA.www_lexingtonlaw_com.dypr_phone_numbers dpr
left join AUSTRIA.www_lexingtonlaw_com.tbl_campaigns wtc on wtc.id=dpr.assigned_campaign
where assigned_campaign<>0
and (assigned_campaign<5000 or assigned_campaign>30000)
and vdn<>0
and vdn is not null
and active=1
and wtc.manager like 'Online - PPC%'
) vdns
on cdv.vdn=vdns.vdn
where cdv.row_date between @beg_date and @end_date
and Department is not null
group by cdv.row_date, vdns.Department, vdns.aid) as m on c.cal_date = m.row_date
--Table 3--
full outer join(SELECT
wtr.yearmonthday
,cam.manager
,wtr.retainer_type
,wtr.campaign
,CASE WHEN wtr.TUCTS_Rank is null THEN '0' else wtr.TUCTS_Rank END as retainer_TUCT
,count(retainer_id) user_signups
from Reporting.dbo.WLC_Tbl_Retainers wtr
inner join AUSTRIA.www_lexingtonlaw_com.tbl_campaigns cam
on wtr.campaign = cam.id
where core = 1
and Entity_ID = 1
and wtr.yearmonthday between @beg_date and @end_date
and cam.manager like 'Online - PPC%'
group by
wtr.yearmonthday
,wtr.campaign
,wtr.retainer_type
,cam.manager
,CASE WHEN wtr.TUCTS_Rank is null THEN '0' else wtr.TUCTS_Rank END) as s on c.cal_date = s.yearmonthday and c.cal_date = m.row_date and s.Campaign = m.aid and s.manager = m.Department
--Table 4--
full outer join
(SELECT
kpi.yearmonthday
,kpi.campaign
,kpi.manager
,count(kpi.custnum) paid_sales
FROM REPORTING.Report.KPI_NEW_CustomersByMonth_LEX kpi
where Status = 'New'
and kpi.upgradedowngrade_flag = 'N'
and kpi.ACTNUMBR_6 = 01
and kpi.manager like 'Online - PPC%'
and kpi.yearmonthday between @beg_date and @end_date
group by
kpi.yearmonthday
,kpi.campaign
,kpi.manager) as p on c.cal_date = p.yearmonthday and p.yearmonthday = coalesce(m.row_date,c.cal_date) and m.aid = p.campaign and m.Department = p.manager
where c.cal_date between @beg_date and @end_date