У меня есть две таблицы, и я хочу сделать левое соединение между ними, , но Я хочу, чтобы левое соединение произошло, только если число записей, содержащих одинаковое значение столбца соединения в первой таблице, большеили равно количеству записей, которые содержат одинаковое значение столбца соединения во второй таблице
что я пытаюсь:
сначала я делаю количество записей для каждогогруппа
и затем я ставлю условие для фильтрации ( a.cnt> = b.cnt )
это код:
insert into work.discount_tmp
select SubsID, MSISDN, EppAcc, User_Name, Bill_Cycle, Tariff, Pack, Discount_Qual_ID,
Discount_ID, Qualification_Type, Discount_Desc, Sequence, a.GroupID, RuleID,
dib_band_id, dib_band_end, dib_charge_ref, DIB_DIS0, dib_disc_type, dib_limit_disc,
DIB_MAX_, cd_class_type, ClassID, Class, dgh_group_id, dgh_inclusion_from,
dgh_inclusion_to, 20191003
from (
(
select *,
row_number() over (partition by GroupID order by Discount_ID) as seqnum,
COUNT(*) over (partition by GroupID order by GroupID) as cnt
from work.disc_band
where tbl_dt = 20191003
order by Discount_ID
) a
left join (
select *,
row_number() over (
partition by GroupID
order by cd_class_type, try(cast(coalesce(classid,'0') as bigint))
) as seqnum,
count(*) over (partition by GroupID order by GroupID) as cnt
from work.alltable1
where tbl_dt = 20191003
) b on a.GroupID = b.GroupID and a.cnt >= b.cnt and a.seqnum = b.seqnum
);
Но моя попытка не работает, потому что сначала выполнено объединение, а затем условие (поэтому значение cnt
во второй таблице не останется прежним после объединения)
Есть идеи, как заставить это работать?