将聚合函数与SWITCH Access SQL一起使用

时间:2017-03-27 07:11:43

标签: sql sql-server ms-access

我的MS Access SQL查询在我尽可能尝试之后继续遇到此错误。

  

您的查询不包含指定的表达式' 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))'作为聚合函数的一部分

以下是代码:

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 ));

我知道问题存在于集团内部,但我不能让它发挥作用。这里奇怪的是前几次运行的确切代码,然后在我保存之后我就不能再恢复工作了。

请帮我解决问题。

非常感谢!

1 个答案:

答案 0 :(得分:0)

正如您所说,您知道错误是在分组中。

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

看起来像这样:

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