SQL0802 - 数据转换或数据映射错误(SQL0802 - Data Conversion o

2019-10-17 16:07发布

我想写计算在服务器端的一些数字,而不是数据被上拉后的查询。 我不断收到SQL0802错误。 我已经尝试了常规的Sum ,以及Doublefloat命令。 我认为,回报是长期。 我使用的是SQL松鼠让我去和去掉小数位的限制,看看是否会解决这个问题。 这是"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"

Answer 1:

如果问题是除以零,你只需要防止分裂从当分母为零发生。 最简单的方法是将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陈述各地来检查,如果分母计算前零整个计算。 如果它是零,替换任何输出是有意义的(零,零,等)的计算。


Answer 2:

如果被零除是你的问题,认为有可能是没有意义的,包括那些没有销售行。

考虑使用CASE表达式只能做除法的时候,销售不为零,但使用空当销售是零。



文章来源: SQL0802 - Data Conversion or Data Mapping Error