Есть много способов сделать это, вот один из них. Обратите внимание, что это будет работать только на SQL Server 2012+.
create table #Something
(
ID int
, CaseNumber int
, Lab varchar(10)
, ActionDate date
, Action varchar(50)
)
insert #Something values
(1, 1, 'Chem', '1/1/2019', 'case created')
, (2, 1, 'Chem', '1/2/2019', 'container created')
, (3, 1, 'DNA', '2/1/2019', 'container routed to DNA')
, (4, 1, 'DNA', '2/3/2019', 'evidence analyzed')
, (5, 1, 'Chem', '2/3/2019', 'edit route')
, (6, 2, 'Chem', '2/4/2019', 'create case')
, (7, 2, 'Chem', '2/5/2019', 'analyze evidence')
;
with SortedResults as
(
select s.ID
, s.CaseNumber
, s.Lab
, s.ActionDate
, Action = case when LAG(Lab, 1) over(partition by CaseNumber order by ActionDate) is null then Action
when LAG(Lab, 1) over(partition by CaseNumber order by ActionDate) = Lab then NULL
else 'container routed to ' + Lab end
from #Something s
)
select *
from SortedResults
where Action > ''
order by CaseNumber, ActionDate
drop table #Something