SQL Server Sum问题的怪异行为



这是我的问题。此查询将计算"提款"当天的现金和信用卡总额。很容易!

同一查询返回了2个不同的结果。

In Store In显示1246.00"In Correct"

当我返回时,在服务器上再次运行此查询

我得到1384.00"正确"

日期字段为日期时间数据类型,现金/信用卡为货币。以上字段均不允许为null。

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' 

这怎么可能呢?任何想法。。。

此查询是完全确定的,因此只有当底层数据发生变化时,结果才会发生变化。正在向SalesPayments表中添加、删除或更新行。

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

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

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

您还可以研究SQL Server日志记录来识别此类更改。

最新更新