Объединение нескольких таблиц в T-SQL и пропущенные пустые строки для одной таблицы - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь объединить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...