2017-05-02 19 views
1

私は注文の値の束を保持するテーブルを持っています、私はパーセンテージになるまで基本的な計算を行うことができます。パーセントを使用したSQL計算

上に示したように、私は割合に消費税を変換して計算を行う方法については考えている、

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で、次のように今、私は私のクエリを持っています

答えて

0

decimalを宣言するときは、精度と位取りを指定する必要があります。

declare @mynumber decimal(9,6); 

rextesterデモ:http://rextester.com/YBFY72733

簡単な例:

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

0.01に掛ける私はあなたが何をしているかを理解し、私は必要なものより良いスーツにそれを修正することができますので、合計がオフになっている。このように正しくマーク... MatPrice = 2373.35、LaborPrice = NULL、MaterialCost = 1870.18、減算されたものは503.17になり、その時点でSalesTaxに結果が乗算され、合計が538.39になります。 – Chris

+0

@Chrisはい、あなたのデータが保持している値のタイプとあなたのビジネスルールが何であるかを確認してください。例えばなぜ材料のコストと販売価格の差だけが売上税が適用されているのか分かりませんし、なぜ労働者が売上税を適用しないのか分かりません。また、材料はコストよりも低い価格で販売することが可能ですか?あなたの販売税はそれからマイナスに終わるでしょう。 – SqlZim

+0

これは私のせいだと私はもっと詳しく説明し、私の質問に数字をつけておくべきだった。 – Chris

1

乗算は0.01

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

編集によって:SQLZimが述べたようにそして、あなたはまた、小数点を宣言するとき、スケール&精度を指定する必要があります。

0

これを試してみてください:結果列

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 
関連する問題