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, время: 21:01.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.