SQL Server Sum发出奇怪的行为

时间:2015-10-29 05:02:48

标签: sql sql-server tsql

这是我的问题。此查询将计算“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' 

这怎么可能?任何想法......

1 个答案:

答案 0 :(得分:1)

此查询是完全确定的,因此仅当基础数据发生更改时,结果才会更改。正在添加,删除或更新行到SalesPayments表。

我不知道您的数据或访问这些表的UI,但请记住一些意外情况,例如:

  • PaymentCashPaymentCredit列中的负值(如果删除它们会导致总和增加) - 除非您对列有约束,否则这是可能的。
  • 更新可更改SaleTillNumberStoreId列值的行 - 这会导致包含其他数据。

如果在两个/两个表上都有列记录上次更改行的列,那么您可以检查这些列以查找两次运行查询之间的编辑。如果不这样做,您可以添加此类列并通过每个表上的触发器进行维护。您还可以以相同的方式捕获负责编辑的数据库用户。 (请记住,这可能会对表的事务访问产生负面影响。)

您还可以浏览SQL Server日志记录以识别此类更改。