на сервере sql, вы можете использовать left,right
, чтобы разделить значение, а затем использовать cte + recursion
, чтобы получить несколько строк, и эта логика также является общей для других rdbms.
Таблица & DDL
|val|
|--- |
|a-1|
|b-2|
|c-3|
|d-4|
|e-5|

Запрос SQL
with cte as (
select
left(val, CHARINDEX('-', val)-1) id
,convert(int, right(val, CHARINDEX('-', val)-1 )) cnt
from t
)
,cte2 as (
select T1.id,T1.cnt - 1 as cnt from cte T1
union all
select T1.id,T2.cnt - 1 as cnt from cte T1
inner join cte2 T2 on T1.id = T2.id and T2.cnt > 0
)
select id from cte2
order by id,cnt
