nycoy, вы должны объяснить свою логику «расщепления» строки на несколько (2 или 3). Не зная логики, основываясь на предоставленной выборке и ожидаемом результате, я думаю, это может быть то, что вы хотите. Если это не так, это должно привести к изменению вашей фактической логики
-- Sample Table
declare @sample table
(
rec# int,
EmpNmbr int,
Store varchar(5),
StorEffDate date,
PartTime char(1),
PTEffDate date,
EmpGrp varchar(10),
EmpGrpEffDate date
)
-- Sample Data
insert into @sample
select 1, 90122, 'T202', '2018-07-03', 'X', '2018-07-26', 'Summary', '2018-07-01' union all
select 2, 90122, 'LR86', '2018-08-13', null, '2018-07-20', 'Regular', '2018-08-14'
-- The Query
select rec#, n.EffDate, n.ExpDate, n.Store, n.EmpGrp, n.PartTime
from @sample s
cross apply
(
select EffDate = s.StorEffDate, ExpDate = dateadd(day, -1, s.PTEffDate), s.Store, s.EmpGrp, PartTime = null
where StorEffDate < PTEffDate
union all
select top 1 EffDate = s.PTEffDate, ExpDate = dateadd(day, -1, s.StorEffDate), x.Store, x.EmpGrp, PartTime = null
from @sample x
where s.PTEffDate < s.StorEffDate
and x.StorEffDate < s.StorEffDate
order by x.StorEffDate desc
union all
select top 1 EffDate = s.StorEffDate, ExpDate = s.StorEffDate, s.Store, x.EmpGrp, s.PartTime
from @sample x
where s.StorEffDate < s.EmpGrpEffDate
and x.StorEffDate < s.StorEffDate
order by x.StorEffDate desc
union all
select EffDate = s.PTEffDate, ExpDate = '01/01/3000', s.Store, s.EmpGrp, s.PartTime
where s.PTEffDate > s.EmpGrpEffDate
union all
select EffDate = s.EmpGrpEffDate, ExpDate = '01/01/3000', s.Store, s.EmpGrp, s.PartTime
where s.PTEffDate < s.EmpGrpEffDate
) n
order by rec#, EffDate