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