Sql 需要查找“金额”列的总和

Sql 需要查找“金额”列的总和,sql,Sql,上午的大部分时间我都在处理这个查询,使用了很多堆栈溢出,并尝试了不同的方法。这已经经历了多次迭代。我张贴的步骤,我卡住了,我知道什么是错误的,我只是不知道如何解决它 问题是: 我需要返回给定日期范围内捐赠的总金额。我原以为在select中输入金额就可以了,但当我将条件Amount>='4000'添加到WHERE子句中时,它会返回超过4000的所有捐赠的总和,而不是总数超过4000的所有捐赠的总和。我觉得我需要让它执行子查询,但我不知道把它放在哪里。我也可能完全错了,使用了不正确的语法来实现我的目

上午的大部分时间我都在处理这个查询,使用了很多堆栈溢出,并尝试了不同的方法。这已经经历了多次迭代。我张贴的步骤,我卡住了,我知道什么是错误的,我只是不知道如何解决它

问题是:

我需要返回给定日期范围内捐赠的总金额。我原以为在select中输入金额就可以了,但当我将条件
Amount>='4000'
添加到
WHERE
子句中时,它会返回超过4000的所有捐赠的总和,而不是总数超过4000的所有捐赠的总和。我觉得我需要让它执行子查询,但我不知道把它放在哪里。我也可能完全错了,使用了不正确的语法来实现我的目标

代码如下。谢谢大家!

SELECT  do.[donorId] as 'ID', 
        d.[fn] as 'First Name',
        d.[ln] as 'Last Name',
        SUM(do.[amount]) as Amount

FROM    [OURDB].[dbo].[Donation] AS do

JOIN    [OURDB].[dbo].[Donor] AS d ON do.[donorId] = d.[donorId]

WHERE   do.[donationDate] > '2015-07-01 00:00:00.000' and do.[donationDate] < '2016-07-01 00:00:00.000'

GROUP BY do.[donorId], d.[fn], d.[ln], do.[amount]
选择do.[donorId]作为“ID”,
d、 [fn]作为“名字”,
d、 [ln]作为“姓”,
金额(do.[金额])作为金额
来自[OURDB].[dbo].[捐赠]和我们一样
加入[OURDB].[dbo].[provider]作为do上的d。[donorId]=d.[donorId]
在哪里做。[捐赠日期]>'2015-07-01 00:00:00.000'和做。[捐赠日期]<'2016-07-01 00:00:00.000'
按do.[donorId],d.[fn],d.[ln],do.[amount]分组

使用Having子句执行以下操作:

SELECT  do.[donorId] as 'ID', 
        d.[fn] as 'First Name',
        d.[ln] as 'Last Name',
        SUM(do.[amount]) as Amount

FROM    [OURDB].[dbo].[Donation] AS do

JOIN    [OURDB].[dbo].[Donor] AS d ON do.[donorId] = d.[donorId]

WHERE   do.[donationDate] > '2015-07-01 00:00:00.000' and do.[donationDate] < '2016-07-01 00:00:00.000'

GROUP BY do.[donorId], d.[fn], d.[ln]
Having SUM(do.amount) > 4000
选择do.[donorId]作为“ID”,
d、 [fn]作为“名字”,
d、 [ln]作为“姓”,
金额(do.[金额])作为金额
来自[OURDB].[dbo].[捐赠]和我们一样
加入[OURDB].[dbo].[provider]作为do上的d。[donorId]=d.[donorId]
在哪里做。[捐赠日期]>'2015-07-01 00:00:00.000'和做。[捐赠日期]<'2016-07-01 00:00:00.000'
按do.[donorId],d.[fn],d.[ln]分组
金额(do.amount)>4000

使用Having子句执行以下操作:

SELECT  do.[donorId] as 'ID', 
        d.[fn] as 'First Name',
        d.[ln] as 'Last Name',
        SUM(do.[amount]) as Amount

FROM    [OURDB].[dbo].[Donation] AS do

JOIN    [OURDB].[dbo].[Donor] AS d ON do.[donorId] = d.[donorId]

WHERE   do.[donationDate] > '2015-07-01 00:00:00.000' and do.[donationDate] < '2016-07-01 00:00:00.000'

GROUP BY do.[donorId], d.[fn], d.[ln]
Having SUM(do.amount) > 4000
选择do.[donorId]作为“ID”,
d、 [fn]作为“名字”,
d、 [ln]作为“姓”,
金额(do.[金额])作为金额
来自[OURDB].[dbo].[捐赠]和我们一样
加入[OURDB].[dbo].[provider]作为do上的d。[donorId]=d.[donorId]
在哪里做。[捐赠日期]>'2015-07-01 00:00:00.000'和做。[捐赠日期]<'2016-07-01 00:00:00.000'
按do.[donorId],d.[fn],d.[ln]分组
金额(do.amount)>4000

此外,正如@MikeS所示,没有必要将
do.[amount]
包含在
GROUP BY
子句中。谢谢!这就是我一直在寻找的,它成功了!通过合并所有捐赠金额从组中删除
do.[amount]
。现在可以了!此外,正如@MikeS所示,没有必要在
GROUP BY
子句中包含
do.[amount]
。谢谢!这就是我一直在寻找的,它成功了!通过合并所有捐赠金额从组中删除
do.[amount]
。现在可以了!