可以使用聚合函数执行DatePart吗?

时间:2014-10-14 13:28:35

标签: sql ms-access ms-access-2010

我在Access 2010中编写了以下查询,它正在回显一条错误消息:

SELECT DatePart("ww",Date,2,1) AS WeekNumber, Metric, Sum(MetricValue) AS WeeklyMetricValue FROM qryActual GROUP BY Metric, WeekNumber;

这是错误消息:

You tried to execute a query that does not include the specified expression 'DatePart("ww",Date,2,1)' as part of an aggregate function.

我是否遗漏了一个非常简单的错误,或者是否需要在单独的查询中执行DatePart才能将其包含在GROUP BY中?

如果您需要其他详细信息,请与我们联系。谢谢!

1 个答案:

答案 0 :(得分:3)

是的,它可以。唯一的问题是您按列别名进行分组,您需要按表达式本身进行分组,即GROUP BY替换WeekNumber DatePart("ww",Date,2,1)

SELECT  DATEPART("ww",Date,2,1) AS WeekNumber, 
        Metric, 
        SUM(MetricValue) AS WeeklyMetricValue 
FROM    qryActual 
GROUP BY Metric, DATEPART("ww",Date,2,1);

根据评论进一步详细说明,这是查询部分的执行顺序:

  • FROM clause
  • WHERE子句
  • GROUP BY子句
  • HAVING条款
  • SELECT条款
  • ORDER BY子句

正如您所看到的,SELECT非常接近底部,因此当执行GROUP BY时,别名尚不存在,因此您可以引用列别名的唯一位置是{{1子句。 (有DBMS允许在其他地方使用它,例如MySQL,但这些是例外,而不是规则)。