Wil*_*iam 1 sql db2 odbc ibm-midrange
我正在尝试编写一个查询来计算服务器端的一些数字,而不是在提取数据之后。我不断收到 SQL0802 错误。我已经尝试了常规Sum
,以及Double
和float
命令。我认为回报是漫长的。我正在使用 SQL Squirrel,所以我删除了小数位限制,看看是否可以解决问题。是"Gross Margin"
计算将其抛弃。其余的计算工作正常。我很感激我能得到的任何帮助。这只是代码的一部分。为了空间起见,我省略了Where
,Group By
和Order 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
在整个计算中放置一个语句,在计算之前检查分母是否为零。如果它为零,则用任何有意义的输出(零、空等)替换计算。 归档时间: |
|
查看次数: |
4720 次 |
最近记录: |