2016-08-29 3 views
1

Ich habe Probleme, Preis Spalte zwischen zwei Daten in SQL Server zu summieren.SQL-Summenspalte zwischen zwei Daten

Ich habe Abfrage wie folgt:

SELECT 
    OSLP.SlpName as Salesman, 
    CAST(OINV.DocTotal as float) as Achiev, 
    OINV.TaxDate 
FROM 
    OINV 
INNER JOIN 
    INV1 ON INV1.DocEntry = OINV.DocEntry 
INNER JOIN 
    OSLP ON OINV.SlpCode = OSLP.SlpCode 
INNER JOIN 
    OITM ON INV1.ItemCode = OITM.ItemCode 
INNER JOIN 
    OMRC ON OITM.FirmCode = OMRC.FirmCode 
INNER JOIN 
    OCRD ON OINV.CardCode = OCRD.CardCode 
WHERE 
    OSLP.SlpName LIKE '01-2 Ika' 
    AND OINV.TaxDate BETWEEN '20160804' AND '20160806' 
GROUP BY 
    OSLP.SlpName, OINV.DocTotal, OINV.TaxDate 

Das Ergebnis der Abfrage oben ist wie folgt:

enter image description here

Ich habe auch SUM auf „CAST (OINV.DocTotal als Schwimmer hinzugefügt) als Achiev "wie folgt:

CAST(sum(OINV.DocTotal) as float) as Achiev 

Aber es gibt falsches Ergebnis zurück:

enter image description here

Das richtige Ergebnis der Erfo Spalte auf die Termine sollten 4906230

Vielen Dank für die Hilfe sein!

UPDATE (Gelöst) Ich habe das Problem gelöst. Es wird nur zur SUM-Abfrage hinzugefügt, da in meiner Abfrage ein Duplikat von Daten vorhanden ist.

Abfrage:

SELECT 
    OSLP.SlpName as Salesman, 
    sum(CAST(INV1.Quantity as float)) as Qty, 
    sum(DISTINCT CAST(OINV.DocTotal as float)) as Achiev 
FROM 
    OINV 
INNER JOIN 
    INV1 ON INV1.DocEntry = OINV.DocEntry 
INNER JOIN 
    OSLP ON OINV.SlpCode = OSLP.SlpCode 
INNER JOIN 
    OITM ON INV1.ItemCode = OITM.ItemCode 
INNER JOIN 
    OMRC ON OITM.FirmCode = OMRC.FirmCode 
INNER JOIN 
    OCRD ON OINV.CardCode = OCRD.CardCode 
WHERE 
    OSLP.SlpName LIKE '01-2 Ika' 
    AND OINV.TaxDate BETWEEN '20160804' AND '20160806' 
GROUP BY 
    OSLP.SlpName 

es zurück: enter image description here

Vielen Dank an alle, die mir geholfen hat!

Antwort

4

Ausgabe ist mit der Gruppe .. von OINV.DocTotal aus der Gruppe entfernen, indem Sie und wie Sie summieren unter

SELECT 
OSLP.SlpName as Salesman, 
sum(CAST(OINV.DocTotal as float)) as Achiev, 
OINV.TaxDate 
FROM OINV 
    INNER JOIN INV1 ON INV1.DocEntry = OINV.DocEntry 
    INNER JOIN OSLP ON OINV.SlpCode = OSLP.SlpCode 
    INNER JOIN OITM ON INV1.ItemCode = OITM.ItemCode 
    INNER JOIN OMRC ON OITM.FirmCode = OMRC.FirmCode 
    INNER JOIN OCRD ON OINV.CardCode = OCRD.CardCode 
WHERE 
OSLP.SlpName like '01-2 Ika' And OINV.TaxDate between '20160804' and '20160806' 
GROUP BY 
    OSLP.SlpName, 
    OINV.TaxDate 
+0

Ich habe Abfrage oben versucht, aber seine Anzeige inkorrekte Abfrage Ergebnis. Der Screenshot ist in meiner Frage oben, in der Zeile "falsches Ergebnis" –

+0

kannst du bitte genaues Problem nennen ... –

+0

Sory für sehr sehr langsame Antwort. Das Problem ist jetzt gelöst. Ich habe gerade "DISTINCT" zu "sum (CAST (OINV.DocTotal as float)) hinzugefügt, wie Achiev" like this "Summe (DISTINCT CAST (OINV.DocTotal as float)) wie Achiev". –

1

Wenn Sie Summe von DocTotal gegen jeden seales Mann anzuzeigen wollte und wollte es auch von TaxDate aufzuspalten , verwenden Sie das folgende Skript

SELECT 
OSLP.SlpName as Salesman, 
CAST(sum(OINV.DocTotal) OVER(PArtition by OSLP.SlpName Order by OINV.TaxDate) as float) as Achiev 
OINV.TaxDate 
FROM OINV 
    INNER JOIN INV1 ON INV1.DocEntry = OINV.DocEntry 
    INNER JOIN OSLP ON OINV.SlpCode = OSLP.SlpCode 
    INNER JOIN OITM ON INV1.ItemCode = OITM.ItemCode 
    INNER JOIN OMRC ON OITM.FirmCode = OMRC.FirmCode 
    INNER JOIN OCRD ON OINV.CardCode = OCRD.CardCode 
WHERE 
OSLP.SlpName like '01-2 Ika' And OINV.TaxDate between '20160804' and '20160806' 

Wenn Sie Summe von DocTotal gegen jeden seales Mann verwenden Sie das folgende Skript angezeigt werden wollte.

SELECT 
OSLP.SlpName as Salesman, 
CAST(sum(OINV.DocTotal) as float) as Achiev 
FROM OINV 
    INNER JOIN INV1 ON INV1.DocEntry = OINV.DocEntry 
    INNER JOIN OSLP ON OINV.SlpCode = OSLP.SlpCode 
    INNER JOIN OITM ON INV1.ItemCode = OITM.ItemCode 
    INNER JOIN OMRC ON OITM.FirmCode = OMRC.FirmCode 
    INNER JOIN OCRD ON OINV.CardCode = OCRD.CardCode 
WHERE 
OSLP.SlpName like '01-2 Ika' And OINV.TaxDate between '20160804' and '20160806' 
GROUP BY OSLP.SlpName