具有多个函数的SQL字符串故障

时间:2015-05-13 02:22:45

标签: sql vb.net ms-access jet

我正在使用连接到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 ByHaving关键字或Sum()DatePart()函数不是很熟悉。

2 个答案:

答案 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进行分组,则会添加所有条目,最终只能获得一笔金额。