Как я могу заставить левое соединение работать только тогда, когда количество записей в первой таблице больше или равно количеству записей во второй таблице?
У меня есть буксирная таблица , и я хочу сделать левое соединение между ними, но я хочу, чтобы левое соединение произошло только в том случае, если количество записей, содержащих одно и то же значение столбца соединения в первой таблице, больше или равно количеству записей, содержащих одно и то же значение столбца соединения во второй таблице
что я пытаюсь сделать :
сначала я делаю подсчет записей в каждой группе
а потом я поставил условие фильтровать (а.БР&ГТ;=б.УНТ)
это и есть код :
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 во второй таблице не останется прежним после завершения соединения )
любая идея, как сделать эту работу ?
Что я уже пробовал:
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 )
Gerry Schmitz
Тогда считай первым. Если подсчеты не сравниваются, не присоединяйтесь.