Расчет фондовых мутаций в sql - PullRequest
0 голосов
/ 24 мая 2018

Я хочу рассчитать исходящий = количество продуктов, которые ежедневно покидали склад.Если я запускаю эти запросы, я вижу, что sql подсчитывает количество как-то вдвое, но я не понимаю, почему.Кто-нибудь, кто может увидеть проблему?Как я могу избежать этого?

SELECT readYesterday.ArticleCode,
       MAX(readToday.ArticleCode) AS ArticleCodeToday,
       readYesterday.ReportDate,
       SUM(ISNULL(readToday.TotalStock, 0)) AS TotalStockToday,
       SUM(readYesterday.TotalStock) AS TotalStockYesterday,
       SUM(readYesterday.TotalStock - ISNULL(readToday.TotalStock, 0)) AS Outbound
FROM ArticleReads readYesterday
LEFT JOIN ArticleReads readToday ON readToday.ArticleCode = readYesterday.ArticleCode
AND readToday.InboundDossier = readYesterday.InboundDossier
AND readToday.ReportDate = DATEADD(DAY, 1, readYesterday.ReportDate)
WHERE readYesterday.ArticleCode ='ART01234'
  AND readToday.ReportDate <> Convert(date, getdate())
  AND readYesterday.ReportDate = '2018-04-26'
GROUP BY readYesterday.ArticleCode,
         readYesterday.ReportDate
ORDER BY ReportDate ASC

SELECT *
FROM ArticleReads readYesterday
WHERE readYesterday.ArticleCode = 'ART01234'
  AND readYesterday.ReportDate = '2018-04-26'

SELECT *
FROM ArticleReads readYesterday WHERE readYesterday.ArticleCode = 'ART01234'
AND readYesterday.ReportDate = '2018-04-27'

Здесь вы можете увидеть результаты

1 Ответ

0 голосов
/ 24 мая 2018

При присоединении к вчерашним и сегодняшним таблицам вы должны быть уверены, что присоединяетесь к первичному ключу.В вашем случае вы используете articlecode, inbounddossieur и reportdate + 1;Тем не менее, поскольку для каждой из них есть две строки, и их нечего различать, объединение вернет 4 строки!Вам необходимо добавить условие соединения, которое однозначно определяет каждую строку - может быть, Код местоположения?

and readToday.LocationCode=readYesterday.LocationCode
...