Благодаря Ferus познакомился с бизнес-анализом, обзовем его "наполовину программированием".
Как я понимаю, залезать в алгоритм составления запроса себе дороже, пока хочу выяснить пределы, в которых можно работать. Добавить простейший подзапрос count(1) - это понятно. А вот такой?
SQL код:
select nvl(sum(
decode(head.doctype,
'WI', spc.quantity,
'CR', spc.quantity,
'CS', -spc.quantity,
'WO', -spc.quantity,
0
)
), 0
) quantity
from smdocuments head, smspec spc
where head.doctype = spc.doctype
and head.id = spc.docid
and head.createdat <= {Фильтр. Реализация. Дата. FDateLast}
and head.docstate in(2, 3)
and (
head.location = {Место хранения. Код места хранения}
or head.locationfrom = {Место хранения. Код места хранения}
or head.locationto = {Место хранения. Код места хранения}
)
and spc.article = {Карточка товара. Артикул}
ORA-22818: выражения подзапросов здесь запрещены.
И еще вопрос - зачем он группирует по кол-ву в отчете о реализации? Как это в интерфейсе убрать?
SQL код:
SELECT (CRD.Article) as Field4,
(CRD.Name) as Field5,
round((nvl(D.RealQty, 0)), 3) as Field6,
round((nvl(D.RealSum, 0)), 4) as Field7,
(LOC.Name) as Field2,
round((SUM(nvl(D.RealSum, 0))), 4) as Field3
FROM SMStoreLocations LOC,
SVCardName CRD,
(SELECT CreateDat, StoreLoc, Article, RealQty, RealSum
FROM supermag.SVAReal R
WHERE CreateDat between to_date('01.11.2015', 'DD.MM.YYYY') and
to_date('17.11.2015', 'DD.MM.YYYY')
and R.StoreLoc = 13) D
WHERE D.Article = CRD.Article
and D.StoreLoc = LOC.ID
GROUP BY (LOC.Name),
(CRD.Article),
(CRD.Name),
round((nvl(D.RealQty, 0)), 3), --------------
round((nvl(D.RealSum, 0)), 4)
ORDER BY 1 ASC, 2 ASC, 3 ASC, 4 ASC, 5 ASC