SQL Group By Aggregate Error

时间:2018-01-25 15:45:26

标签: sql vba

有一个更复杂的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的情况下测试过。

2 个答案:

答案 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])