SQL0802 - 数据转换或数据映射错误

时间:2013-01-29 21:17:16

标签: sql odbc db2 ibm-midrange

我正在尝试编写一个计算服务器端某些数字的查询,而不是在数据被拉出之后。我一直收到SQL0802错误。我尝试了常规Sum以及Doublefloat命令。我认为回报是漫长的。我正在使用SQL Squirrel所以我去除了小数位限制,看看是否能解决问题。正是"Gross Margin"计算将其抛弃。其余的计算工作正常。我感谢任何帮助。这只是代码的一部分。为了空间,我省略了WhereGroup ByOrder By部分:

Select  Distinct DB1.Tb1.STORE,
        DB1.Tb2.DATE_ID,

Sum (DB1.Tb1.CUR_CASH_SALES+DB1.Tb1.CUR_CHARGE_SALES) As "Total Sales",

Sum (DB1.Tb1.CUR_CASH_COST+DB1.Tb1.CUR_CHARGE_COST) As "Total Cost",

Sum ((DB1.Tb1.CUR_CASH_SALES+DB1.Tb1.CUR_CHARGE_SALES)-DB1.Tb1.CUR_CASH_COST+DB1.Tb1.CUR_CHARGE_COST)) As "Gross Profit",

Sum (((DB1.Tb1.CUR_CASH_SALES+DB1.Tb1.CUR_CHARGE_SALES)-(DB1.Tb1.CUR_CASH_COST+DB1.Tb1.CUR_CHARGE_COST))/(DB1.Tb1.CUR_CASH_SALES+DB1.Tb1.CUR_CHARGE_SALES)))As "Gross Margin"

2 个答案:

答案 0 :(得分:4)

如果问题被零除,则只需要在分母为零时防止除法发生。最简单的方法是分别sum分子和分母,然后在发生后分开:

       sum (
           DB1.Tb1.CUR_CASH_SALES+DB1.Tb1.CUR_CHARGE_SALES-
           DB1.Tb1.CUR_CASH_COST+DB1.Tb1.CUR_CHARGE_COST
       ) /
       sum (
           DB1.Tb1.CUR_CASH_SALES+DB1.Tb1.CUR_CHARGE_SALES
       ) as "Gross Margin"

如果你所分组的整个类别的分母为零,那么你只能得到零除。

如果仍然存在问题,您还需要做其他事情。根据您的需要,您可以:

  • 使用您的where子句从输出中排除分母为零的组。
  • 在整个计算周围放置一个case语句,在计算之前检查分母是否为零。如果它为零,则将计算替换为有意义的输出(零,空等)。

答案 1 :(得分:0)

如果除以零是您的问题,请考虑包含没有销售的行可能没有意义。

考虑使用CASE表达式仅在销售额不为零时进行除法,但在销售额为零时使用null。