помогите с запросом

heldir
Дата: 07.12.2007 12:43:41
Есть таблица T (id number, name varchar2, value namber)

1 aaa 10
2 aaa 15
5 bbb 12
7 bbb 8
8 aaa 20
9 ccc 10

результат вывода должен быть

aaa 25
bbb 20
aaa 20
ccc 10

т.е. просуммировать value, для повторяющихся значений name и сортировкой по id, должно работать на 8i, у меня совсем ступор, не могу сообразить как сделать :(
Jesterson
Дата: 07.12.2007 12:47:17
Условие кривое. Что значит с сортировкой по id? Вон у вас у aaa есть строка с id == 8, а вы его на первое место ставите. Сортировать по минимальному id в группе? По максимальному? По среднему значению? Добавляете max/min/avg(id) и order by по нему.
dmidek
Дата: 07.12.2007 12:50:37
Это известная задачка.
Поищите по форуму по слову start_of_group...
Тифа
Дата: 07.12.2007 14:08:42
без аналитики

select sum(a.num),a.str, nvl(b.str,c.str)
from 
(select id,str,num, rownum rn from tab1) a,
(select id,str,num, rownum rn from tab1) b,
(select id,str,num, rownum rn from tab1) c
where b.rn(+)=a.rn+1
  and b.str(+)=a.str
  and c.rn(+)=a.rn-1
  and c.str(+)=a.str
group by a.str, nvl(b.str,c.str)

с аналитикой

SELECT DISTINCT str,
                SUM (num) OVER (PARTITION BY str, decode (str,
                                                          lagstr, 1,
                                                          leadstr, 1,
                                                          0
                                                         ))
           FROM (SELECT ID, str, num, LAG (str, 1) OVER (ORDER BY ID) lagstr,
                        LEAD (str, 1) OVER (ORDER BY ID) leadstr
                   FROM tab1)

но чет в первом случае таблицу на три раза, а во втором дистинкт
наверно как то лучше можно