我正在使用连接到Visual Basic的本地Access数据库。我的问题是
SELECT RebateReceived, DatePart('yyyy',[RebateMailedDate]) AS MailedDate, Sum(RebateValue) as MoneyReceived
FROM RebateInfoStorage
where RebateReceived='Received'
group by RebateReceived
having DatePart('yyyy',[RebateMailedDate])
我正在尝试获取具有相同年份的列和已“收到”的单词以识别需要一起求和(添加)的记录。我对Group By
和Having
关键字或Sum()
和DatePart()
函数不是很熟悉。
答案 0 :(得分:1)
因此,DBMS将进入RebateInfoStorage并获取RebateReceived = 'Received'
所有的行。然后,它将这些记录分组,其中每个组包含表达式DatePart('yyyy', RebateMailedDate)
评估为相同值的记录(即它们具有相同的年份)。然后,对于每个组,它将返回带有年份的单个结果行,以及该组中所有RebateValue
的总和。操作按此顺序进行。
HAVING类似于WHERE,但是在GROUP BY之后发生并且是放在一组记录上的条件,而WHERE是记录上的条件。
SELECT
YEAR(RebateMailedDate) AS MailedDate,
SUM(RebateValue) as MoneyReceived
FROM
RebateInfoStorage
WHERE
RebateReceived = 'Received'
GROUP BY
YEAR(RebateMailedDate);
编辑:看起来YEAR(x)是一个更合适的函数!
答案 1 :(得分:0)
您应该按DatePart进行分组,其中RebateReceived ='已收到'。有关“您可以参考http://www.w3schools.com/sql/sql_having.asp
”语法的详细信息分组表示您的输出表将根据该列中的唯一元素进行分组。例如,如果2014年有多个条目作为年份,则它们将全部组合在一起,并且它们的RebateValue将一起累加。如果您使用RebateReceived进行分组,则会添加所有条目,最终只能获得一笔金额。