10

我想显示 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

4

2 回答 2

16

假设所有这些列都是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,将强制计算结果用floats 而不是ints 完成。通过选择100,我也准备好将其视为%.

我也对你的括号感到有点困惑——我想我说得对——但是你在单个值周围有括号,然后在其他地方你在同一级别混合了运算符 ( -and ),所以依赖/在优先规则上定义哪个运算符首先应用。

于 2012-11-19T11:13:25.267 回答
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。

于 2012-11-19T11:08:28.330 回答