12.03.2015 12:42
vdm
 
Если берешь количество по всем складам, то и smgoods.quantity нужно суммировать. Если не по всем, а по конкретному складу - то суммировать/объединять нужно с учетом склада.
12.03.2015 12:51
BotMan
 
Код:
select crd.name, crd.article, cast((sum(goo.quantity)-sum(nvl(op.salequantity,0))+sum(nvl(op.returnquantity,0))) as float) as quantity
from supermag.smcard crd, supermag.smgoods goo, supermag.smopergoods op
where crd.name like '%с408%'
and crd.article=op.article(+)
and crd.article=goo.article 
group by crd.name, crd.article, quantity 

4 rows selected in 0.062 seconds
просто этот запрос отрабатывается быстрее чет этот

Код:
select crd.name, crd.article, cast(sv.quantity as float) as quantity
from supermag.smcard crd, supermag.svgoodswithoper sv
where crd.name like '%с408%'
and crd.article=sv.article
group by crd.name, crd.article, sv.quantity

4 rows selected in 2.138 seconds
12.03.2015 13:01
Mtirt
 
У тебя один магазин? Или несколько в сети?
12.03.2015 13:07
BotMan
 
у меня один магазин и два места хранения, но товар в них не совпадает. походу по этому узко мысю :-D
12.03.2015 13:14
Mtirt
 
Раз два места хранения, всё же не мешает добавить в результат storeloc, и условие на объединение таблиц smgood и smopergood дополнить им же...
12.03.2015 14:20
vdm
 
Код:
with a as (select article, name
             from supermag.smcard c
            where c.name like '%с408%')
select a.name, a.article, cast(sum(nvl(g.quantity, 0))+sum(nvl(o.quantity, 0)) as float) as quantity
  from a, supermag.smgoods g,
       (select op.article,
               op.locid storeloc,
               sum(op.returnquantity)-sum(op.salequantity) quantity
          from supermag.smopergoods op, a
         where a.article=op.article
        group by op.article, op.locid
       ) o
 where a.article=g.article(+)
   and g.article=o.article(+)
   and g.storeloc=o.storeloc(+)
group by a.name, a.article;
Тут не учитывается вариант когда запись в smgoods отсутствует вообще, а продажи идут, в smopergoods артикул есть.
В svgoodswithoper это учтено, но выборка оттуда действительно медленная.
17.03.2015 09:35
BotMan
 
Код:
select decode(accepted, 1, 'Активная', 2, 'Исключенная', 0, 'Новая') as Accepted, crd.name, crd.article, cast(sv.quantity as float)  as quantity, 
wm_concat(barcode) as barcode
from supermag.smcard crd, supermag.svgoodswithoper sv, supermag.smstoreunits st 
where crd.article=sv.article
and crd.article=st.article 
and sv.storeloc in (:Storeloc)
and barcode in (:Barcode)
and upper(crd.name) like upper('%:name%')
and crd.article in (:article)
and crd.accepted in(:accept)
and sv.quantity <>0
group by crd.accepted, crd.name, crd.article, sv.quantity order by 4 desc
получился вот такой запрос. отрабатывается конечно не мгновенно, но главное чтобы все выходные данные были точные
Норм? )
Часовой пояс GMT +3, время: 02:48.

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