1

我正在尝试编写一个查询来计算服务器端的一些数字,而不是在提取数据之后。我不断收到 SQL0802 错误。我已经尝试过常规Sum以及命令。我认为回报是长期的。我正在使用 SQL Squirrel,所以我去删除了小数位限制,看看这是否能解决问题。是计算把它扔掉了。其余的计算工作正常。我很感激我能得到的任何帮助。这只是代码的一部分。为了空间,我省略了,和部分:Doublefloat"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"
4

2 回答 2

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"

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

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

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

If divide by zero is your problem, consider that there may be no point in including rows that have no sales.

Consider using a CASE expression to do division only when the sales are not zero, but use null when the sales are zero.

于 2013-01-31T05:03:03.227 回答