Попробуйте, это работает в Oracle, так что я предполагаю, что это должно быть в MySQL. Это не очень ... Используйте функцию Lag, чтобы отображать индикатор и сумму предыдущего имени. Затем найдите разницу между индикаторами и суммируйте суммы. Наконец, используйте инструкцию CASE для форматирования возвращаемых результатов.
select name,
CASE diff WHEN 1 THEN to_char(prev_ind||','||indicator)
ELSE to_char(indicator) END as Indicator,
CASE diff WHEN 1 then to_char(sum_amount)
else to_char(amounnt) END as Amount
FROM (
select name, indicator, prev_ind, sum(indicator-prev_ind) as diff, amounnt,
sum(amounnt + prev_amount) sum_amount
from (
select name, indicator, lag(indicator,1,0) over (order by name) prev_ind, amounnt,
lag(amounnt,1,0) over (order by name) prev_amount
from tmp1
order by name, indicator
)
group by name, indicator, prev_ind, amounnt
order by name, indicator)
where diff != 2
order by name;
Извините, что если я использую sybase iq, но не MySQL? благодаря – gsql