Если промо-коды всегда имеют длину 4 символа, возможно, самый простой способ - объединение:
select id, substring(code,1,4)
from YourTable
where LEN(code) >= 4
union all
select id, substring(code,6,4)
from YourTable
where LEN(code) >= 9
union all
select id, substring(code,11,4)
from YourTable
where LEN(code) >= 14
<etc>
Для более гибкого решения взгляните на одну из функций разделения . После создания этой функции в вашей базе данных вы можете вызвать ее следующим образом:
select t.id, s.items
from YourTable t
cross apply
dbo.Split(t.code,'-') s
Оба запроса приведут к результату, указанному в вашем ответе.