Агрегация значений нескольких ячеек в одну

Azureon
Дата: 19.12.2012 17:59:34
Доброго времени суток, уважаемые :)

Поиск мне мало чем помог, так что перехожу сразу к делу.

Что имеем:
num | value
1 -> aaaaaaa
1 -> bbbbbbbbbbb
1 -> ccccccc

2 -> aaaaaaaa
2 -> bbbbbbbb

3 -> ccccccccccc
3 -> ddddddddddd
3 -> aaaaaa
3 -> bbbbbbbbbb
3 -> yyyyyyy


Что нужно получить
1 -> aaaaaaa-bbbbbbbbbbb/ccccccc-+
2 -> aaaaaaaa-bbbbbbbb-
3 -> ccccccccccc/ddddddddddd/aaaaaa-bbbbbbbbbb+

Немного условий и пояснений.
1. Объемы данных - сотни Мб (собственно, в скорости обработки и дело)
2. Value разделяются символом "/"
3. Если value длиной менее 10 символов, после него необходимо проставить символ "-", он же будет служить разделителем
4. Если всех value больше, чем умещается в 30 символов, в конце ставится символ "+"
5. Последний value может быть урезан не более чем на 2 символа от своей исходной длины.

P.S. мои вряд ли грамотно составленные циклы обещают работать не одни сутки. Буду благодарна за любую наводку. Да и интересно стало: как можно было б просто агрегировать все значения value с одним разделителем? Есть ли тут альтернатива оракловскому LISTAGG?
AndreTM
Дата: 19.12.2012 21:25:47
Не так давно была похожая тема.
Принцип тот же - воспользоваться SCAN и наполнить курсор нужными наборами.
Вот только я не совсем понял ваши принципы, например:
- ответ(1) противоречит условию(4) - общая длина всех символов = 25, а в конце стоит +
- ответ(3) где-то потерял значение yyyyyyy
- порядок значений в наборе определяется физической последовательностью записей в таблице?