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

Wil*_*iam 1 sql db2 odbc ibm-midrange

我正在尝试编写一个查询来计算服务器端的一些数字,而不是在提取数据之后。我不断收到 SQL0802 错误。我已经尝试了常规Sum,以及Doublefloat命令。我认为回报是漫长的。我正在使用 SQL Squirrel,所以我删除了小数位限制,看看是否可以解决问题。是"Gross Margin"计算将其抛弃。其余的计算工作正常。我很感激我能得到的任何帮助。这只是代码的一部分。为了空间起见,我省略了Where,Group 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"
Run Code Online (Sandbox Code Playgroud)

小智 5

如果问题是被零除,您只需要防止在分母为零时发生除法。最简单的方法是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"
Run Code Online (Sandbox Code Playgroud)

然后,如果您分组的整个类别的分母为零,则您只会得到除以零。

如果它仍然是一个问题,您将需要另外做一些其他的事情。根据您的需要,您可以:

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