2017-05-02 1 views
1

Ich habe eine Tabelle, die eine Reihe von Werten für eine Bestellung enthält, kann ich grundlegende Berechnungen darauf, bis ich zu einem Prozentsatz erhalten. Im Moment habe ich meine Abfrage wie folgtSQL-Berechnungen mit einem Prozentsatz

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 hält ein SalesTax und diese besondere SalesTax ist 7,00, ich habe keine Ahnung, wie die SalesTax auf einen bestimmten Prozentsatz zu konvertieren und die Berechnung tun, wie oben

gezeigt

Antwort

0

Sie müssen Genauigkeit und Skalierung angeben, wenn Sie decimal, z.

declare @mynumber decimal(9,6); 

rextester Demo: http://rextester.com/YBFY72733

Ein vereinfachtes Beispiel:

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

kehrt:

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

Meine beste Vermutung an, was Sie für Ihre Anfrage wollen:

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

ich diese als korrekt markiert, weil ich verstehe, was Sie tun und es besser gerecht beheben können, was ich brauche, sind die Summen aus ... MatPrice = 2373.35, LaborPrice = NULL, MaterialCost = 1870.18, die Subtrahierten kommen auf 503.17, und an diesem Punkt würde die SalesTax mit dem Ergebnis multipliziert und die Summe würde zu 538.39 kommen – Chris

+0

@Chris Ja, ich war nicht ' Vergewissern Sie sich, welche Art von Werten Ihre Daten enthalten und welche Geschäftsregeln gelten. z.B. Ich bin nicht sicher, warum nur die Differenz zwischen Kosten und Verkaufspreis auf Materialien Umsatzsteuer angewendet wird, und ich bin mir nicht sicher, warum Labour keine Umsatzsteuer hat. Ist es auch möglich, dass ein Material zu geringeren Kosten verkauft wird? Ihre Umsatzsteuer würde dann negativ enden. – SqlZim

+0

Das ist meine Schuld, ich hätte mehr im Detail erklärt und Nummern in meiner Frage – Chris

1

Multiplizieren von .01

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

edit: Und wie SQLZim erwähnt, müssen Sie auch den Maßstab & Präzision angeben, wenn eine Dezimalzahl zu deklarieren.

0

Try this: multiplizieren mit 0,01 für die Ergebnisspalte

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