[ОТВЕТИТЬ]
Опции темы
04.12.2006 17:02  
omorozov
Есть запрос вида:
SELECT k.tree, Sum(b.totalprice)
FROM smdocuments a, SMSpec b, smcard d, SACardClass k
where b.docid=a.id
And a.createdat>=TO_DATE('01.11.2006','dd.mm.yyyy')
And a.createdat<TO_DATE('01.12.2006','dd.mm.yyyy')
And a.doctype='CS'
And b.doctype='CS'
And d.article=b.article
And k.id=d.idclass
Group by k.tree


Количество, записей будет переменным в зависимости от
наличия продаж по категориям.
Хотелось бы иметь постоянное количество строк с 0 если продаж не было.

Каким методом решать задачу, поделитесь мыслями
 
04.12.2006 17:56  
akonev
ну если совсем в лоб, то вот так:
Код:
select t.tree, s.sm
from SACardClass t, 
(SELECT k.tree tr, Sum(b.totalprice) sm
FROM smdocuments a, SMSpec b, smcard d, SACardClass k
where b.docid=a.id
And a.createdat>=TO_DATE('01.01.2006','dd.mm.yyyy')
And a.createdat<TO_DATE('01.02.2006','dd.mm.yyyy')
And a.doctype='CS'
And b.doctype='CS'
And d.article=b.article
And k.id=d.idclass
Group by k.tree) s
where t.tree=s.tr(+)
снаружи полное дерево, внутри твой же запрос. правда, на самом деле - ЭТО нужно оптимизировать. но работать должно и так. *06
 
04.12.2006 18:04  
omorozov
Цитата:
Сообщение от Andrew_Konev
ну если совсем в лоб, то вот так:
Код:
select t.tree, s.sm
from SACardClass t, 
(SELECT k.tree tr, Sum(b.totalprice) sm
FROM smdocuments a, SMSpec b, smcard d, SACardClass k
where b.docid=a.id
And a.createdat>=TO_DATE('01.01.2006','dd.mm.yyyy')
And a.createdat<TO_DATE('01.02.2006','dd.mm.yyyy')
And a.doctype='CS'
And b.doctype='CS'
And d.article=b.article
And k.id=d.idclass
Group by k.tree) s
where t.tree=s.tr(+)
снаружи полное дерево, внутри твой же запрос. правда, на самом деле - ЭТО нужно оптимизировать. но работать должно и так. *06
Да, работает.

А мне на sql.ru советовали через NVL типа

SELECT k.tree, NVL (Sum(b.totalprice),0) as Сумма
FROM smdocuments@dbrespc a, SMSpec@dbrespc b, smcard d, SACardClass k
where b.docid=a.id
And a.createdat>=TO_DATE('01.11.2006','dd.mm.yyyy')
And a.createdat<TO_DATE('02.11.2006','dd.mm.yyyy')
And a.doctype='CS'
And b.doctype='CS'
And d.article=b.article
And k.id=d.idclass(+)
Group by k.tree


но фигвам
 
04.12.2006 18:19  
akonev
очень много плюсиков. раз в 5-10 медленнее должно работать.

а nvl - его и к вложенным точно так же привинтишь.
у него же тут одно назначение - чтобы вместо null'иков нолики возвращались.
уберешь его - все так же отработает (ну разве что, чуть шустрее).
только вместо нулей пустые поля будут. null'и, то есть.

о как! пока писал - уже снесли с плюсиками *03
 
04.12.2006 18:22  
omorozov
Понятно.
Да, я тот запрос уже удалил, явно ошибочный, суммы были на порядки больше правильных
 
 
Опции темы



Часовой пояс GMT +3, время: 00:17.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.