2016-08-29 7 views
1

SQL Serverの2つの日付間の価格列の合計に問題があります。2つの日付の間のSQL合計列

は、私はこのようなクエリがある:

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 

上記のクエリの結果はこのようなものです:floatとして

enter image description here

は私もCAST」でSUMを追加した(OINV.DocTotal )as Achiev "のようになります。

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

ただし、結果は正しくありません。

enter image description here

日にAchiev列の正しい結果が助けを4906230

感謝しなければなりません!

更新(解決済み) 私はこの問題を解決しました。クエリにはデータの重複があるため、SUMクエリには別個のものを追加するだけです。

問合せ:

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 

それが返されます:私を助けているすべての人に enter image description here

感謝を!

答えて

4

問題は、グループとのことで、グループからOINV.DocTotalを削除し、各seales男に対してDocTotalの合計を表示したいともTaxDateことによってそれを分割したい場合は

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

私は上記のクエリを試しましたが、そのクエリの結果は正しくありません。スクリーンショットは上記の私の質問にあります。 "間違った結果" –

+0

正確な問題を教えてください... –

+0

非常に非常に遅い応答のためのソーリー。問題は今解決されました。私はちょうどAchiev "sum"(DISTINCT CAST(OINV.DocTotal as float))をAchievとして "合計"(CAST(OINV.DocTotal as float))に "DISTINCT"を追加しました。 –

1

以下のようにまとめるか...ですあなたは次のスクリプトを使用し、各seales男 に対してDocTotalの合計を表示したい場合は、 は、次のスクリプト

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' 

を使用しています。

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