【问题标题】:Using Aggregate function with SWITCH Access SQL将聚合函数与 SWITCH Access SQL 一起使用
【发布时间】:2017-03-27 07:11:43
【问题描述】:

在我尝试了所有可能的方法后,我的 MS Access SQL 查询一直遇到此错误。

您的查询不包括指定的表达式 'SWITCH(b.STD > dateadd("h",1,a.STA), INT(SUM(a.blocktime + b.blocktime + ( a.std - b. sta )) * 24) , (b.STD

代码如下:

SELECT SWITCH(b.STD > dateadd("h",1,a.STA),  
                INT(SUM(a.blocktime + b.blocktime + ( a.std - b.sta )) * 24), 
                (b.STD <= dateadd("h",1,a.STA) AND b.STD <= #02:00:00#),  
                INT(SUM(a.blocktime + b.blocktime + (Dateadd("d", 1, a.std) - b.sta )) * 24)   ) AS [Blocktime]

  FROM TempFinal a Inner JOIN TempFinal b
ON (a.Dest = b.Orig)

Group By

(a.blocktime + b.blocktime + ( a.std - b.sta )),   
(a.blocktime + b.blocktime + (Dateadd("d", 1, a.std) - b.sta ));

我知道问题出在 Group By 部分,但我无法让它发挥作用。奇怪的是前几次运行的确切代码,然后在我保存后我无法再让它恢复工作。

请帮我解决问题。

非常感谢!

【问题讨论】:

  • 好像你想做一个条件聚合,你可能需要在SWITCH的结果上创建一个SUM,像这样:SELECT SUM(SWITCH(b.STD &gt; dateadd("h",1,a.STA), INT((a.blocktime + b.blocktime + ( a.std - b.sta )) * 24), (b.STD &lt;= dateadd("h",1,a.STA) AND b.STD &lt;= #02:00:00#), INT((a.blocktime + b.blocktime + (Dateadd("d", 1, a.std) - b.sta )) * 24) )) AS [Blocktime]跨度>
  • @dnoeth:它不允许我使用 sum 函数
  • 你不能在 SWITCH 上使用 SUM,奇怪。我没有深入的 Access 知识,但我认为它类似于 CASE。您是否删除了 SWITCH 中的 SUM?

标签: sql sql-server ms-access


【解决方案1】:

正如你所说,你知道错误是按部分分组的。

尝试将您的计算放在子查询中,并将分组放在主查询中。这将解决您的问题。

它看起来像这样:

SELECT SUM(c.Blocktime)
FROM
(SELECT SWITCH(b.STD > dateadd("h",1,a.STA),  
                INT(a.blocktime + b.blocktime + ( a.std - b.sta ) * 24), 
                (b.STD <= dateadd("h",1,a.STA) AND b.STD <= #02:00:00#),  
                INT(a.blocktime + b.blocktime + (Dateadd("d", 1, a.std) - b.sta ) * 24)   ) AS [Blocktime], (a.blocktime + b.blocktime + ( a.std - b.sta )) As GroupA, (a.blocktime + b.blocktime + (Dateadd("d", 1, a.std) - b.sta )) AS GroupB

  FROM TempFinal a Inner JOIN TempFinal b
ON (a.Dest = b.Orig)) AS c
GROUP BY c.GroupA, c.GroupB

【讨论】:

  • 问题是我还想在查询中选择其他字段。如果我理解正确,这样做只能让我选择 Blocktime?
  • 不,随意选择。只需将它们添加到子查询和主查询中,并确保在主查询中进行聚合和分组。
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2017-04-28
  • 2022-12-15
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多