两个日期之间的SQL Sum列

两个日期之间的SQL Sum列,sql,sql-server,date,sum,between,Sql,Sql Server,Date,Sum,Between,在SQL Server中,我无法对两个日期之间的价格列求和 我有这样的疑问: 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.

在SQL Server中,我无法对两个日期之间的价格列求和

我有这样的疑问:

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
CAST(sum(OINV.DocTotal) as float) as Achiev
以上查询结果如下:

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
CAST(sum(OINV.DocTotal) as float) as Achiev

我还在“CAST(OINV.DocTotal作为float)作为Achive”中添加了SUM,如下所示:

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
CAST(sum(OINV.DocTotal) as float) as Achiev
但是,它返回错误的结果:

日期Achive列的正确结果应为
4906230

非常感谢你的帮助

更新(已解决) 我已经解决了这个问题。它只是将distinct添加到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
它返回:


谢谢所有帮助过我的人

问题由分组讨论。。将OINV.DocTotal从group by中删除,并执行如下操作

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

问题是由。。将OINV.DocTotal从group by中删除,并执行如下操作

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

如果您想显示每个seales人的DocTotal之和,还想按TaxDate进行拆分, 使用以下脚本

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'

如果你想显示每个seales人的博士总数 使用以下脚本

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

如果您想显示每个seales人的DocTotal之和,还想按TaxDate进行拆分, 使用以下脚本

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'

如果你想显示每个seales人的博士总数 使用以下脚本

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

我尝试了上面的查询,但它显示的查询结果不正确。屏幕截图在我上面的问题中,在“错误结果”这一行,因为响应非常慢。现在问题解决了。我刚刚在“sum(CAST(OINV.DocTotal as float))as achive”中添加了“DISTINCT”,例如“sum(DISTINCT CAST(OINV.DocTotal as float))as achive”。感谢您的帮助Sandeep:我尝试了上面的查询,但它显示的查询结果不正确。屏幕截图在我上面的问题中,在“错误结果”这一行,因为响应非常慢。现在问题解决了。我刚刚在“sum(CAST(OINV.DocTotal as float))as achive”中添加了“DISTINCT”,比如“sum(DISTINCT CAST(OINV.DocTotal as float))as achive”。感谢您的帮助Sandeep:D