问题原因: |
问题分析: 一、首先通过sql事件跟踪器捕获后台sql执行过程 在【批次存货汇总表】查询结果显示时,后台sql执行语句(EventClass为『SQL:BacthCompleted』)如下: 1、判断临时表是否存在; 2、读取符合条件的相关数据,形成临时表; 3、对临时表进行分组,并过滤掉期初、收入、发出均为0的记录。 二、步骤2即形成临时表过程如下: 【 Select ...数据源 字段列... INTO TempRepPcch_机器名_0 FROM RdRecords INNER JOIN RdRecord On RdRecords.Id = RdRecord.id INNER JOIN +‘关联数据表(包括一些基础档案表)’ WHERE +过滤条件】 此时可直接在查询分析器中查询临时表内容,查看出现问题的数据记录具体信息(未分组汇总的); 三、步骤3即通过group by分组,并滤去期初、收入、发出均为0的记录: 【 Select ...字段列..., Sum(QCJCSL) AS 期初结存数量,Sum(QCJCJS) AS 期初结存件数,Sum(SRSL) AS 收入数量,Sum(SRJS) AS 收入件数,Sum(FCSL) AS 发出数量,Sum(FCJS) AS 发出件数,Sum(QCJCSL) + Sum(SRSL) - Sum(FCSL) AS 期末结存数量 , Sum(QCJCJS) + Sum(SRJS) - Sum(FCJS) AS 期末结存件数 --INTO Tempdb..TemPcch_机器名_0 FROM TempRepPcch_机器名_0 GROUP BY +分组条件 Having (IsNull(Sum(QCJCSL),0) <> 0 OR IsNull(Sum(SRSL),0) <> 0 OR IsNull(Sum(FCSL),0) <> 0 )】 --滤去期初、收入、发出均为0的记录 |