如何在查询中使用除法函数?

时间:2012-11-19 11:01:20

标签: sql sql-server sql-server-2008 sql-server-2005

我想显示Overshipment列的百分比。

我的示例查询

select (SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T) / (SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T  + SPGR99_ON_TIME_Q))
from 
CSPGI09_OVERSHIPMENT 

表名 - CSPGI09_OVERSHIPMENT

我的公式:

-------------------------------------------------------
SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T)
-------------------------------------------------------
SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T  + SPGR99_ON_TIME_Q

我希望用%显示结果,例如66.57%

我正在使用SQL SERVER 2008

2 个答案:

答案 0 :(得分:13)

假设所有这些列都是int,那么要排序的第一件事是将它们中的一个或多个转换为更好的数据类型 - int除法执行截断,因此任何小于100%会给你0的结果:

select (100.0 * (SPGI09_EARLY_OVER_T – SPGI09_OVER_WK_EARLY_ADJUST_T)) / (SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T  + SPGR99_ON_TIME_Q)
from 
CSPGI09_OVERSHIPMENT 

在这里,我用100.0多次删除了一个数字,这将强制计算结果用float而不是int来完成。选择100,我也准备将其视为%

我对你的包围感到有些困惑 - 我想我已经把它弄错了 - 但你有单个值的括号,然后在其他地方你混合了运算符(-和{{ 1}})在同一级别,依赖于优先级规则来定义首先应用哪个运算符。

答案 1 :(得分:2)

尝试这样的事情

select Cast((SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T) / (SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T  + SPGR99_ON_TIME_Q)) as varchar(20) + '%' as percentageAmount
from CSPGI09_OVERSHIPMENT

我假设值是百分比表示 - 如果不将其转换为有效百分比总数,则添加%符号并将列转换为varchar。