有一个更复杂的SQL,但是当测试一个简化得多的SQL来到达错误的底部我仍然会收到
您尝试执行不包含指定的查询 表达式“datediff(”m“,0,[StatsDate])”作为聚合的一部分 功能
我正在测试的SQL是:
GetSQL = "SELECT datediff(""m"",0,[StatsDate]) as MonthOffset, SUM([Offered]) as OfferedCount From QueueStats Group By MonthOffset"
所以,我在函数中使用表达式datediff("m",0,[StatsDate])
,在表达式MonthOffset
Group by MonthOffset
我很困惑。 dateiff ......的表达是有效的,因为我在没有Group By的情况下测试过。
答案 0 :(得分:3)
您不能在Group By中使用别名,因为必须在字段命名之前执行查询。
使用:
Group By datediff("m",0,[StatsDate])
代替。
答案 1 :(得分:0)
Jet / ACE SQL引擎(主要是MS Access,Microsoft Query,Excel VBA查询,工作簿和文本文件的DAO / ADO记录集)确实允许使用命名别名,但通常在SELECT
子句中。这主要是由于SQL的操作顺序不同于按代码顺序处理的其他语言。但是,第一个条款SELECT
通常是最后一步:
FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause
例如,以下是有效的查询:
SELECT DateDiff('m', 0, [StatsDate]) as MonthOffset,
SUM([Offered]) as OfferedCount,
[MonthOffset] + 5 As FiveDaysAhead,
[OfferedCount] * 2 As DoubleOfferedCount
FROM QueueStats
GROUP BY DateDiff('m', 0, [StatsDate])