SQL 多个函数的字符串问题

SQL String Troubles with Multiple Functions

我正在使用连接到 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])

我正在尝试获取具有相同年份的列和具有 'received' 的单词来识别需要汇总(添加)在一起的记录。我对 Group ByHaving 关键字或 Sum()DatePart() 函数不是很熟悉。

因此 DBMS 将进入 RebateInfoStorage 并获取 RebateReceived = 'Received' 中的所有行。然后,它将对这些记录进行分组,其中每个组包含表达式 DatePart('yyyy', RebateMailedDate) 的计算结果相同的记录(即它们具有相同的年份)。然后对于每个组,它会 return 一个包含年份的结果行,以及该组中所有 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) 是一个更合适的函数!

您应该按 RebateReceived='Received' 的 DatePart 分组。关于Having的更多语法可以参考http://www.w3schools.com/sql/sql_having.asp

分组依据意味着您的输出 table 将根据该列中的唯一元素进行分组。比如有多个entry,年份都是2014,那么它们都会被归为一组,然后将它们的RebateValue加在一起。如果您使用 RebateReceived 分组,所有条目将被添加,您最终将得到一个总和。