【问题标题】:Using DATEPART function in access SQL query with joined tables and aggregate function在连接表和聚合函数的访问 SQL 查询中使用 DATEPART 函数
【发布时间】: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 子句中引用别名,情况也是如此。

标签: sql ms-access datepart


【解决方案1】:

我认为您不能在 group by 子句中使用别名,至少在没有子查询的情况下不能。一种解决方案是通过 f.e. 重复组中的确切表达式:

group by
        Clients.ClientID
,       datepart("YYYY", AccountVals.valuationAmount) 
,       datepart("Q", AccountVals.valuationAmount)

【讨论】:

  • 这没有帮助。 Access 现在要求我填写 SumOfValuationAmount 的值
  • SumOfValuationAmount 应该只在您的查询中出现一次,在 as 子句之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 2017-10-27
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多