问题原因: |
经检查发现材料出库单的9521存货共有88条记录,包括44条数量为0.03及44条数量为-0.03的记录,合计应为0。其中
‘ ltrim(str((case sum(OutQuantity) when 0 then null else sum(cast(str(OutPrice,20,2) as decimal(20,2))
+OutDif)/sum(OutQuantity) end),20,2)) as 发出单价’表达式由于系统判断的该存货的近似值为-2.7755575615628914E-17,所以在 sum(cast(str(OutPrice,20,2) as decimal(20,2))
+OutDif)/sum(OutQuantity)时算出一个超过20位长的结果,
而str函数指定位长为20位,所以最终得到一
个‘********************’的字符串。如果该表达式象计算结存单价一样,将float转换为decimal即‘cast(sum(outquantity) as decimal(20,2))=0 then null’应不会出现上述结果。
由于以上问题导致执行如下语句(部分),系统报错:
将数据类型 varchar 转换为 float 时出错。最终导致查询收发存汇总表的数据为空。 |