【问题标题】:Calculating stock mutations in sql在 sql 中计算股票突变
【发布时间】:2018-05-24 07:11:37
【问题描述】:

我想计算出库 = 每天离开仓库的产品数量。 如果我运行这些查询,我可以看到 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'

Here you can see the results

【问题讨论】:

  • 邮政编码作为文本而不是图像。

标签: sql sql-server tsql stock outbound


【解决方案1】:

在加入昨天和今天表时,您必须确保加入主键。在您的情况下,您使用的是 articlecode、inbounddossieur 和 reportdate+1;但是,由于每行有 2 行并且没有任何区别,因此连接将返回 4 行!您需要添加一个唯一指定每一行的连接条件 - 可能是位置代码?

and readToday.LocationCode=readYesterday.LocationCode

【讨论】:

  • 哇,就是这样!非常感谢!感谢您的宝贵时间和快速帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2021-04-07
  • 2019-03-11
相关资源
最近更新 更多