Ich habe die folgende SQL-Abfrage.SQL-Rundung scheint nicht wie erwartet zu funktionieren
DECLARE
@StartDate DATE ='20160101' ,
@EndDate DATE = '20160331',
@Box1 DECIMAL,
@Box2 DECIMAL,
@Box3 DECIMAL,
@Box4 DECIMAL,
@Box5 DECIMAL,
@Box6 DECIMAL,
@Box7 DECIMAL,
@Box8 DECIMAL,
@Box9 DECIMAL
SET @Box1 = (SELECT ROUND(SUM (vt.Vat),2) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SET @Box2 = (SELECT ROUND(SUM(vt.VatDueOnECPurchases/vt.ConversionFactor),2) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SET @Box3 = (SELECT ROUND(SUM(@Box1 + @Box2),2))
SET @Box4 = (SELECT (ROUND(SUM(vt.VatInput),2) + @Box2) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SET @Box5 =(SELECT @Box3 - @Box4)
SET @Box8 = (SELECT ROUND(SUM(vt.SlAway/vt.ConversionFactor),2) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SET @Box9 = (SELECT ROUND(SUM(vt.PlAway/vt.ConversionFactor),2) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SET @Box6 = (SELECT (ROUND(SUM(vt.SlHome),2) + @Box8) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SET @Box7 = (SELECT (ROUND(SUM(vt.PlHome),2) + @Box9) FROM VatTransactions vt WHERE vt.VatTransactionDate BETWEEN @StartDate AND @EndDate)
SELECT @Box1 AS BOX1, @Box2 AS Box2, @Box3 AS Box3, @Box4 AS Box4, @Box5 AS Box5, @Box6 AS Box6, @Box7 AS Box7, @Box8 AS Box8, @Box9 AS Box9
Wenn dies ausgeführt wird, erzeugt es das folgende Ergebnis;
Alle Felder in den Tabellen, aus denen die Abfrage es Informationen (mit der offensichtlichen Ausnahme der Daten) werden als entweder Geld oder Dezimal-Typen definiert wird immer.
In Wirklichkeit ist die Box4 Figur sollte 1351,17 und die box5 Zahl sollte sein sein -1.351,17
Kann mir jemand sagen, warum ich die Ergebnisse zu sehen bin, die ich bin, und was ich sollte getan haben zu bekommen das Ergebnis, das ich erwartet hatte?
Dank
'DECLARE @ Box4 DECIMAL = '1.234' SELECT @ Box4' ergibt' 1', da es keine Skalierung/Genauigkeit in der Deklaration der Variablen gibt ... –
@AlexK. Du schlägst mich um ungefähr 30 Sekunden :-) –
@AlexK. Du hast absolut recht, Junge, kann ich manchmal dicht sein. –