SQL Server 2008 R2返回不一致的结果

时间:2014-08-13 07:54:34

标签: performance sql-server-2008-r2

此查询返回未按查询预期方式分组的结果。这种情况最近才开始发生,并且每周至少发生两次。

    SELECT 
       UserN, Program, CPair, PosCcy1,  OpenPosOpt,  CrossR,
       OptPrem, DailyOptValue, OptPandL
    FROM (
      (SELECT 
          UserN, Program, CPair,PosCcy1,OpenPosOpt,RevalC1, 
          RevalC2, CrossR, OptPrem,DailyOptValue,OptValue, OptPandL
         FROM 
             (SELECT  
                 UserN, Program, CPair, 
                 ROUND(SUM(Ccy1Amount),4) AS PosCcy1, 
                 ROUND(SUM(OpenOptPos),4) AS OpenPosOpt, 
                 MAX(RevalC1) as RevalC1, 
                 MAX(RevalC2) as RevalC2, 
                 case when MAX(RevalC2) = 0 and MAX(RevalC1) = 0 then 0
                      else MAX(RevalC2)/MAX(RevalC1) end as CrossR,
                 ROUND(SUM(OptPrem),2) AS OptPrem, 
                 ROUND(SUM(DailyOp),4) AS DailyOptValue, 
                 ROUND(SUM(OptValue),4) AS OptValue, 
                 ROUND(SUM(OpPandL),4) AS OptPandL,
                 sum(Prem) as Prem    
              FROM   
                 AReport rr  
              GROUP BY  
                 UserN, Program, CPair) a  
         WHERE  
            not(PosCcy1= 0  and  OpenPosOpt= 0 and  Prem  = 0)
 )) results

'AReport'是一个视图。

可以看出,我希望查询返回按用户,程序和CPair分组的数据。几乎总是我得到那个结果,但突然有时结果不是这样的。

当发生这种情况时,SQL Server会在一整天内返回未分组的结果。我在SSMS期间运行了部分查询,我得到的结果按预期分组为两个内部嵌套选择。在我突出显示最外层选择的那一刻,结果集是未分组的。

我在错误日志和事件查看器中查找了错误,似乎没有任何建议。第二天自动纠正此行为。有人可以告诉我,编写查询的方式是否会导致此行为。

2 个答案:

答案 0 :(得分:0)

阅读本文 http://msdn.microsoft.com/en-gb/library/ms189822.aspx
并检查您的查询

答案 1 :(得分:0)

最后发现不一致的是显示的数据几乎总是以所需的方式排序。见Why does SQL Server 2008 order when using a GROUP BY and no order has been specified?

通过查询添加订单修复了问题。