[ОТВЕТИТЬ]
Опции темы
12.03.2015 12:42  
vdm
Если берешь количество по всем складам, то и smgoods.quantity нужно суммировать. Если не по всем, а по конкретному складу - то суммировать/объединять нужно с учетом склада.
 
"Спасибо" vdm от:
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 это учтено, но выборка оттуда действительно медленная.
 
"Спасибо" vdm от:
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, время: 20:45.

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