【发布时间】:2013-02-07 10:27:23
【问题描述】:
我想在表格中选择日期的年份和季度部分,而不是整个日期。我构建了以下查询来实现这一点:
SELECT Clients.ClientID,
Sum(AccountVals.ValuationAmount) AS SumOfValuationAmount,
Datepart("YYYY", AccountVals.valuationAmount) AS valYear,
Datepart("Q", AccountVals.valuationAmount) AS valQuarter
FROM (Accounts
INNER JOIN Clients
ON Accounts.ClientID = Clients.ClientID)
INNER JOIN AccountVals
ON Accounts.AccountID = AccountVals.AccountID
GROUP BY Clients.ClientID,
SumOfValuationAmount,
valYear,
valQuarter;
虽然我在一个简单的选择查询中成功地使用了DATEPART,但这个查询既是一个聚合函数又具有链接表的事实让我很吃惊。有什么想法吗?
编辑:我意识到我的查询没有任何标准,这意味着它可能会尝试聚合来自不同日期的结果,因此它无法显示日期部分。我尝试添加类似HAVING valYear = 2012 AND valQuarter = 3 的内容,但得到了同样的错误
【问题讨论】:
-
这是因为订单操作是在:
FROM, WHERE, GROUP BY, SELECT, ORDER BY完成的,所以比如当你在GROUP BY中引用valYear时访问不知道这是什么因为它还没有完成选择并意识到这是Datepart("YYYY", AccountVals.valuationAmount)。如果您尝试在WHERE子句中引用别名,情况也是如此。