这是我的问题。此查询将计算“Cashup”日的现金和信用卡总额。轻松吧!
相同的查询返回了2个不同的结果。
在Store中显示1246.00“正确”
当我返回时,再次在该服务器上运行此查询
我得到1384.00“正确”
日期字段是日期时间数据类型,现金/信用卡是金钱。 上述字段均不允许为空。
SELECT Sum(Payments.PaymentCash) AS cash,
Sum(Payments.PaymentCredit) AS CreditCards
FROM Sales
INNER JOIN Payments
ON Sales.SaleID = Payments.SaleID
WHERE Sales.StoreID = 3
AND Sales.SaleTillNumber = 1
AND Payments.PaymentDate > '2015-10-20 19:09:48.000'
AND Payments.PaymentDate < '2015-10-22 08:29:52.120'
这怎么可能?任何想法......
答案 0 :(得分:1)
此查询是完全确定的,因此仅当基础数据发生更改时,结果才会更改。正在添加,删除或更新行到Sales
或Payments
表。
我不知道您的数据或访问这些表的UI,但请记住一些意外情况,例如:
PaymentCash
或PaymentCredit
列中的负值(如果删除它们会导致总和增加) - 除非您对列有约束,否则这是可能的。SaleTillNumber
或StoreId
列值的行 - 这会导致包含其他数据。如果在两个/两个表上都有列记录上次更改行的列,那么您可以检查这些列以查找两次运行查询之间的编辑。如果不这样做,您可以添加此类列并通过每个表上的触发器进行维护。您还可以以相同的方式捕获负责编辑的数据库用户。 (请记住,这可能会对表的事务访问产生负面影响。)
您还可以浏览SQL Server日志记录以识别此类更改。