Это проблема типа пробела и островков, которую можно решить с помощью решения row_number, как показано ниже
см. рабочая демонстрация
; with indexedtable as
(
select *, r=row_number() over ( order by(select null)) from t
),
rownumbers as
(
select *, r1= row_number() over (partition by ItemCode order by r) from indexedtable
)
select count=count(r-r1),ItemCode,ItemName
from rownumbers
group by ItemCode ,ItemName, r-r1