SQL таблицы представляют неупорядоченные наборы. Ваши результаты предполагают определенный порядок, и столбец для заказа отсутствует. Далее предполагается, что такой столбец существует. Насколько я знаю, это просто называется id
.
. Этот тип проблемы требует рекурсивного CTE (или некоторой другой итеративной обработки). Вот один из методов:
with t as (
select t.*, row_number() over (order by id) as seqnum
from mytable t
),
cte as (
select top (1) seqnum, convert(varchar(max), name) as name, convert(decimal(10, 1), value) as value,
(case when value >= 1.0 then 1 else 0 end) as is_new
from t
order by seqnum
union all
select t.seqnum,
(case when cte.value >= 1 then t.name else concat(cte.name, ',', t.name) end),
convert(decimal(10, 1), (case when cte.value > =1 then t.value else t.value + cte.value end)),
(case when cte.value >= 1 then 1 else 0 end) as is_new
from cte join
t
on t.seqnum = cte.seqnum + 1
)
select name, value as sum_value
from (select cte.*, lead(name) over (order by seqnum) as nextname
from cte
) cte
where nextname is null or nextname not like name + '%';
Здесь - это дб <> скрипка.