Статистика продаж Искала / месяц
Я пытаюсь получить статистику по ежемесячным продажам в iScala ERP. Система отчетов iScala сообщает об этих значениях.
Мой запрос Sql возвращает
3 058 023 2017-01-01
2 237 651 2017-02-01
4 700 720 2017-03-01
2 268 501 2017-04-01
3 183 576 2017-05-01
3 238 173 2017-06-01
1 949 041 2017-07-01
3 077 111 2017-08-01
Мой запрос, выбирая из счетов SL03, применяя Заказ OR20, чтобы вычесть сумму фрахта. После этого я объединяюсь в SL29 Invoice Consolidation History, используя перекрестную заявку, чтобы вычесть Freight и SaleTax.
BEGIN
SELECT
SUM(cast(replace(isnull(b,0),',','.') as decimal(10,0))) Total,
cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, d), 0) as date) as varchar(50)) date
FROM (
SELECT
SUM(SL03100-aa.f) b ,
cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, SL03004), 0) as date) as varchar(50)) d
FROM SL030100
CROSS apply (
SELECT top 1 OR20044 f
FROM OR200100
WHERE SL030100.SL03036 = OR200100.OR20001
) aa
WHERE SL03004 BETWEEN '2017-01-01' AND DATEADD(d, 1,getdate())
group by cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, SL03004), 0) as date) as varchar(50))
UNION
SELECT
SUM((SL29007-SL29009-ba.f)) b,
cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, SL29006), 0) as date) as varchar(50)) d
FROM SL290100
CROSS apply (
SELECT top 1 OR20044 f
FROM OR200100
WHERE SL290100.SL29028 = OR200100.OR20001
) ba
WHERE SL29006 BETWEEN '2017-01-01' AND DATEADD(d, 1,getdate())
group by cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, SL29006), 0) as date) as varchar(50))
) AS tbl
group by cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, d), 0) as date) as varchar(50))
order by cast(cast(DATEADD(MONTH, DATEDIFF(MONTH, 0, d), 0) as date) as varchar(50))
END
Я не знаю, является ли это лучшим способом сделать это или какие поля пропущены. Я чувствую, что разница между внутренним отчетом и моим результатом SQL невелика, но заметна для клиента.
Я надеюсь, что вы можете указать мне правильное направление или некоторые ресурсы, которые могут помочь.
С наилучшими пожеланиями
MK