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