Я создал вид, подобный этому:
create or replace view test_view as
select
SC.department,
SC.ad_platform,
SC.date,
SC.code,
SC.account_id,
SC.account_name,
SC.conversions,
SC.impressions,
SC.clicA,
SC.cash_cost,
SC.reward_cost,
SC.service_fee,
SC.open_account,
CM.ua_user_name,
CM.agent_name,
CM.mediabuy_agent_name
from
(
select
A.ad_platform, A.date, A.code, A.account_id,
max(A.account_name) as account_name,
max(A.department) as department,
max(A.open_account) as open_account,
sum(A.conversions) as conversions,
sum(A.impressions) as impressions,
sum(A.clicA) as clicA,
sum(A.cost) as cash_cost,
sum(A.service_fee) as service_fee,
0 as reward_cost
from table_a A
where A.ad_platform not in ('A', 'B')
group by A.ad_platform, A.date, A.code, A.account_id
) as SC right join table_b CM on CM.account_id = SC.account_id
union
select
S.department,
S.ad_platform,
S.date,
S.code,
S.account_id,
S.account_name,
S.conversions,
S.impressions,
S.clicA,
OD.cash_cost,
S.service_fee,
OD.reward_cost,
S.open_account,
C.ua_user_name,
C.agent_name,
C.mediabuy_agent_name
from
(
select
A.ad_platform, A.date, A.code, A.account_id,
max(A.account_name) as account_name,
max(A.department) as department,
max(A.open_account) as open_account,
sum(A.conversions) as conversions,
sum(A.impressions) as impressions,
sum(A.clicA) as clicA,
sum(A.service_fee) as service_fee
from table_a A
where A.ad_platform in ('A', 'B')
group by A.ad_platform, A.date, A.code, A.account_id
) as S
RIGHT JOIN
table_b C
on C.account_id = S.account_id
RIGHT JOIN
table_c OD
on OD.date = S.date and OD.account_id = S.account_id and OD.platform = S.ad_platform and OD.code = S.code;
Проводная вещь, sql после union
имеет результаты, которые reward_cost
больше 0, но после I union
эти два , результаты, которые reward_cost
больше 0, пропали. Это очень запутанно, потому что нет дублированных записей, и я попытался union all
, но все равно получил те же результаты. Кто-нибудь может взглянуть на это sql? Я новичок в этом. Спасибо.