Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Остатки товаров на определенную дату : Супермаг Плюс (Супермаг 2000)

28.03.2024 18:43


16.03.2007 12:05
Mtirt
 
Посмотри вот это
Код:
SELECT STORELOC,
                       ARTICLE,
                       INCOMEID,
                       MAX(INCOMECLIENTINDEX) CLIENTINDEX,
                       MAX(INCOMEQ) DOCQUANTITY,
                       MAX(INCOMESUM) DOCSUM,
                       SUM(QUANTITY) QUANTITY from ffmaprep
16.03.2007 13:05
dmware
 
1. поля storeloc нет в таблице ffmaprep (там SALELOCATIONFROM, SALELOCATIONTO)
2. max - похоже действительно то, что нужно. возвращает наиболшее значение, но поскольку содержимое полей будет совпадать у документов с одним и тем же saleid, то возвращается единственное значение.
сейчас попробую переделать запрос, спасибо!
16.03.2007 14:34
deucel
 
поставь rectype = '1'
*04
16.03.2007 15:37
dmware
 
а это что будет значить?
19.03.2007 08:11
dmware
 
Помогите пожалуйста собрать все вместе. В одном из полей соответственно нужно подсчитывать остатки: ПРИХОД - РАСХОД. Делаю так:
SUM(MAX(INCOMEQ) - MAX(SALEQ)). Выдает групповая функция не является одногруппной...
Как мне получить разность между выражениями MAX(INCOMEQ) и
MAX(SALEQ) в одном запросе?

Весь запрос целиком:
SELECT
FFMapRep.ARTICLE ARTICLE,
SMCARD.NAME,
SUM(MAX(INCOMEQ) - MAX(SALEQ)),
(pr.price),
prt.NAME,
NVL(FFMapRep.Salelocationto, FFMapRep.Salelocationfrom) LOCATION,
to_date('01.03.2007', 'DD.MM.YYYY') DATE_G

FROM
FFMapRep,
SMDOCUMENTS,
SMCARD,
SMPRICES pr,
SMPRICETYPES prt

WHERE
FFMapRep.ARTICLE = SMCARD.ARTICLE
AND FFMapRep.Saletype = SMDOCUMENTS.doctype
AND FFMapRep.Saleid = SMDOCUMENTS.id
AND FFMapRep.article = SMCARD.article
AND pr.article = SMCARD.article
AND pr.pricetype = prt.id

AND (SMCARD.RECEIPTOK='1'
AND pr.STORELOC IN(1)
AND nvl(FFMapRep.Salelocationfrom, FFMapRep.Salelocationto) IN(6, 12)
AND SMCARD.ACCEPTED=1
AND prt.ID IN(2)
AND FFMapRep.Saledate < to_date('01.03.2007', 'DD.MM.YYYY')
AND SMDOCUMENTS.docstate = 3
AND FFMapRep.article IN('0003672'))

GROUP BY FFMapRep.article, SMCARD.NAME, pr.price, prt.name, nvl(FFMapRep.Salelocationto, FFMapRep.Salelocationfrom)
ORDER BY LOCATION ASC
19.03.2007 08:21
Mtirt
 
Во внешнем запросе - Sum, во внутреннем - Max. Добавь еще одну группировку...
19.03.2007 08:24
dmware
 
Цитата:
Mtirt Во внешнем запросе - Sum, во внутреннем - Max. Добавь еще одну группировку...
Извини, не совсем понятно, каким образом) А разве здесь не так?
SUM(MAX(INCOMEQ) - MAX(SALEQ))
Сначала sum, затем max.
19.03.2007 08:26
Mtirt
 
2 запроса. Один внутри другого.
а у тебя 2 функции.
19.03.2007 08:35
dmware
 
Если я правильно понял, что-то вроде:
(SUM(
(SELECT
MAX((INCOMEQ))
from ffmaprep
WHERE
ARTICLE='0003672'
AND SALEDATE <= to_date('01.03.2007', 'DD.MM.YYYY')
AND nvl(SALELOCATIONFROM, SALELOCATIONTO) IN(6)
GROUP BY INCOMEID, (INCOMEQ))))
Но в данном случае внутренний запрос возвратит более одной строки, о чем и сообщает oracle
19.03.2007 08:38
Mtirt
 
Приблизительно так:
Код:
select SUM(QQ) from
(SELECT
MAX(INCOMEQ)-max(saleq) QQ
from ffmaprep
WHERE
ARTICLE='3672'
AND SALEDATE <= to_date('01.03.2007', 'DD.MM.YYYY')
AND nvl(SALELOCATIONFROM, SALELOCATIONTO) IN(6)
GROUP BY INCOMEID, INCOMEQ)
Часовой пояс GMT +3, время: 18:43.

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