使用百分比的SQL计算

使用百分比的SQL计算,sql,sql-server,Sql,Sql Server,我有一个表格,里面有一堆订单的值,我可以对它进行基本的计算,直到得到一个百分比。现在我的问题如下 declare @MyNumber decimal set @MyNumber = (select SalesTax from [OrderHeader] where OrderHeaderID = 20) select sum(o.MaterialPrice) as "MatPrice", sum(o.LaborPrice) as "LaborPrice", sum(o

我有一个表格,里面有一堆订单的值,我可以对它进行基本的计算,直到得到一个百分比。现在我的问题如下

declare @MyNumber decimal
set @MyNumber = (select SalesTax from [OrderHeader] where OrderHeaderID = 20)

select 
    sum(o.MaterialPrice) as "MatPrice",
    sum(o.LaborPrice) as "LaborPrice",
    sum(o.MaterialCost) as "MaterialCost",
    sum(isnull(o.MaterialPrice,0)) - sum(isnull(o.MaterialCost,0)) - sum(isnull(o.LaborPrice,0)) * @MyNumber as "RESULT"
from [OrderDetail] o
inner join [OrderHeader] oh on oh.OrderHeaderID = o.OrderHeaderID
where o.OrderHeaderID = 20
@MyNumber持有一个销售税,这个销售税是7.00,我不知道如何将销售税转换成一个百分比,并按照上面所示的方法进行计算

乘以.01

set @MyNumber = ((select SalesTax from [OrderHeader] where OrderHeaderID = 20) * .01)

编辑:正如SQLZim所指出的,在声明十进制时,您还必须指定小数位数和精度。

在声明
十进制时,您需要指定精度和小数位数,例如

declare @mynumber decimal(9,6);
rextester演示:

一个简化的例子:

select 
    convert(decimal,.07) as NotSpecified
  , convert(decimal(9,6),.07) as Specified
返回:

+--------------+-----------+
| NotSpecified | Specified |
+--------------+-----------+
|            0 | 0,070000  |
+--------------+-----------+

我对您的查询所需内容的最佳猜测:

declare @MyNumber decimal(9,6);
set @MyNumber = (select SalesTax from [OrderHeader] where OrderHeaderID = 20)

/* we want the sales tax to be a percentage (less than 1), 0.0825 */
if @MyNumber >= 1 set @MyNumber = @MyNumber *.01;

select 
    MatPrice = sum(o.MaterialPrice)
  , LaborPrice = sum(o.LaborPrice)
  , MatieralCost = sum(o.MaterialCost)
  , SubTotal = (
      sum(isnull(o.MaterialPrice,0)) 
    + sum(isnull(o.MaterialCost,0)) 
    + sum(isnull(o.LaborPrice,0))
    )
  , SalesTax = (
      sum(isnull(o.MaterialPrice,0)) 
    + sum(isnull(o.MaterialCost,0)) 
    + sum(isnull(o.LaborPrice,0))
    ) * @MyNumber
  , Total = (
      sum(isnull(o.MaterialPrice,0)) 
    + sum(isnull(o.MaterialCost,0)) 
    + sum(isnull(o.LaborPrice,0))
    ) * (@MyNumber+1)
from [OrderDetail] o
  inner join [OrderHeader] oh 
    on oh.OrderHeaderID = o.OrderHeaderID
where o.OrderHeaderID = 20

尝试以下操作:结果列乘以0.01

declare @MyNumber decimal
set @MyNumber = (select SalesTax from [OrderHeader] where OrderHeaderID = 20)

select 
    sum(o.MaterialPrice) as "MatPrice",
    sum(o.LaborPrice) as "LaborPrice",
    sum(o.MaterialCost) as "MaterialCost",
    sum(isnull(o.MaterialPrice,0)) - sum(isnull(o.MaterialCost,0)) - sum(isnull(o.LaborPrice,0)) * @MyNumber*0.01 as "RESULT"
from [OrderDetail] o
inner join [OrderHeader] oh on oh.OrderHeaderID = o.OrderHeaderID
where o.OrderHeaderID = 20

我把这个标记为正确的,因为我知道你在做什么,并且可以修改它以更好地满足我的需要,总数是错的…MatPrice=2373.35,LaborPrice=NULL,MaterialCost=1870.18,减去的结果是503.17,此时销售税将乘以结果,总数将达到538。39@Chris对我不确定您的数据包含什么类型的值,以及您的业务规则是什么。e、 g.我不确定为什么只有材料的成本和销售价格之间的差异才适用销售税,我也不确定为什么劳动力不适用销售税。此外,是否有可能以低于成本的价格销售材料?那么你的销售税就会变成负数。这是我的错,我应该在我的报告中详细解释并提供数字question@Chris只要你到了你要去的地方,我很高兴能帮助你。是的,先生,非常感谢