Here's something which will calculate the 'batch number' for each cart_no. Maybe it could help?declare @t table (cart_no int, STATUS char(1), DATE_TIME datetime, BILL_NO int)insert @t select 1, 'L', '2009-01-01', NULLunion all select 1, 'L', '2009-01-02', NULLunion all select 1, 'L', '2009-01-02', NULLunion all select 1, 'E', '2009-01-03', NULLunion all select 1, 'E', '2009-01-03', NULLunion all select 1, 'L', '2009-01-04', NULLunion all select 1, 'L', '2009-01-05', NULLunion all select 1, 'L', '2009-01-06', NULLunion all select 1, 'L', '2009-01-07', NULLunion all select 1, 'E', '2009-01-07', NULLunion all select 1, 'E', '2009-01-08', NULLunion all select 1, 'E', '2009-01-09', NULLunion all select 1, 'L', '2009-01-10', NULLunion all select 1, 'E', '2009-01-10', NULLunion all select 1, 'L', '2009-01-11', NULLunion all select 1, 'E', '2009-01-11', NULLunion all select 1, 'E', '2009-01-11', NULLunion all select 1, 'E', '2009-01-11', NULLunion all select 2, 'L', '2009-01-01', NULLunion all select 2, 'L', '2009-01-02', NULLunion all select 2, 'L', '2009-01-02', NULLunion all select 2, 'E', '2009-01-11', NULLunion all select 2, 'E', '2009-01-11', NULL; with t1 as ( select *, row_number() over (partition by cart_no order by DATE_TIME, STATUS desc) - row_number() over (partition by cart_no, STATUS order by DATE_TIME) as STATUS_Grouping from @t), t2 as (select distinct cart_no, STATUS, STATUS_Grouping from t1), t3 as (select *, row_number() over (partition by cart_no, STATUS order by STATUS_Grouping) as BatchNumber from t2)select a.*, BatchNumberfrom t1 a inner join t3 b on a.cart_no = b.cart_no and a.STATUS = b.STATUS and a.STATUS_Grouping = b.STATUS_Groupingorder by cart_no, DATE_TIME
Ryan Randall - Yak of all tradesSolutions are easy. Understanding the problem, now, that's the hard part.