Calculs SQL en utilisant un pourcentage

J'ai une table qui contient un tas de valeurs pour un ordre, je peux faire des calculs de base jusqu'à ce que j'arrive à un pourcentage. En ce moment j'ai ma requête comme suit

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 détient un SalesTax et ce SalesTax particulier est 7.00, je n'ai aucune idée sur la façon de convertir le SalesTax en un pourcentage et de faire le calcul comme indiqué ci-dessus

Vous devez spécifier la précision et l'échelle lors de la déclaration decimal , par exemple

 declare @mynumber decimal(9,6); 

rextester demo: http://rextester.com/YBFY72733

Un exemple simplifié:

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

résultats:

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

Ma meilleure estimation de ce que vous voulez pour votre requête:

 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 

Multiplier par .01

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

edit: Et comme l'a noté SQLZim, vous devez également spécifier l'échelle et la précision lors de la déclaration d'une décimale.

Essayez ceci: multipliez par 0.01 pour la colonne résultat

 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