SQL Access,仅当另一列中的所有值都在指定范围内时,才对一列的值求和

时间:2014-08-12 15:57:39

标签: sql ms-access

我在Access数据库(从外部源导入 - 经常导入)中有下表(称之为tblGifts):

Person____GiftDate___GiftAmount  
 A________6/4/2014____$20  
 A________7/1/2014____$20  
 B________7/1/2014____$30  
 B________7/4/2014____$20  

有一个用户表单提示用户输入日期范围。我希望只有当所有GiftDates都在提供的日期范围内时,才可以将GiftAmount列相加。因此,例如,如果用户提供2014年6月30日至2014年7月10日,则输出将类似于:

Person____GiftAmount  
 B________$50  

因为他有一个超出范围的GiftDate,所以不会包括A人。

我正在考虑做以下事情:(这显然不会起作用,因为它也吸引了A人)

SELECT Person, Sum(GiftAmount)
FROM tblGifts 
WHERE GiftDate Between [Forms]![InputForm]![BeginDate] And [Forms]![InputForm]![EndDate]
GROUP BY Person 

1 个答案:

答案 0 :(得分:5)

您只需要添加一个WHERE子句,排除在日期范围之外捐赠的人。

SELECT Person, Sum(GiftAmount)
FROM tblGifts 
WHERE Person NOT IN (
    SELECT Person FROM tblGifts
        WHERE GiftDate >  [Forms]![InputForm]![EndDate] 
            OR  GiftDate <  [Forms]![InputForm]![StartDate]
) 
GROUP BY Person