2017-09-25 70 views
1

逗人使用MySQL查询,在Microsoft Access

不用说了,我已经失去我的脑海里,使这工作完全正常在MySQL工作到Microsoft Access查询。我有一些例外。

这是一个比较查询,该比较查询确实可以比较当前月份和前一个月的耗电量,并按建筑物进行分组。

正如我所说的,它在MySQL中完全正常,但在MS Access中不起作用。

原始查询:

SELECT 
tblElectricReadings.Building, 
SUM(CASE WHEN tblElectricReadings.ReadingDate >= DATE_SUB(NOW(), INTERVAL 1 YEAR) THEN (tblElectricReadings.EndMeter - tblElectricReadings.StartMeter) ELSE NULL END) AS 'Cons1', 
SUM(CASE WHEN tblElectricReadings.ReadingDate BETWEEN DATE_SUB(NOW(), INTERVAL 2 YEAR) AND DATE_SUB(NOW(), INTERVAL 1 YEAR) THEN (tblElectricReadings.EndMeter - tblElectricReadings.StartMeter) ELSE NULL END) AS 'Cons2', 
CONCAT(MONTHNAME(tblElectricReadings.ReadingDate)) AS MonthRecorded 
FROM tblElectricReadings 
WHERE tblElectricReadings.ReadingDate >= DATE_SUB(NOW(), INTERVAL 2 YEAR) 
GROUP BY tblElectricReadings.Building, 
CONCAT(MONTHNAME(tblElectricReadings.ReadingDate)) 
ORDER BY tblElectricReadings.ReadingDate, tblElectricReadings.Building 

我认识的MS Access SQL是有点不同的,所以我潜伏在互联网之后尝试了一些变化。 这是接近我能得到,但它仍然是行不通的:

SELECT 
tblElectricReadings.[Building], 
SUM(IIF(tblElectricReadings.[Reading Date] >= DATEADD("y",-1,NOW()), (tblElectricReadings.[End Meter] - tblElectricReadings.[Start Meter]),0)) AS 'Cons1', 
SUM(IIF(tblElectricReadings.[Reading Date] BETWEEN DATEADD("y",-2,NOW()) AND DATEADD("y",-1,NOW()), (tblElectricReadings.[End Meter] - tblElectricReadings.[Start Meter]),0)) AS 'Cons2', 
MONTHNAME(tblElectricReadings.[Reading Date]) AS MonthRecorded 
FROM tblElectricReadings 
WHERE tblElectricReadings.[Reading Date] >= DATEADD("y",-2,NOW()) 
GROUP BY tblElectricReadings.[Building], MONTHNAME(tblElectricReadings.[Reading Date]) 
ORDER BY tblElectricReadings.[Reading Date], tblElectricReadings.[Building] 

通过上述,我现在得到以下错误:“您的查询不包括指定表达式“tblElectricReadings [。阅读日期]'作为聚合函数的一部分

有没有人有任何线索我做错了什么?当然任何帮助将不胜感激:)道歉,如果我问一些容易,但我仍然在学习很多这里:(

感谢您可以提供任何最终的帮助。

编辑3:我管理!这对我有用 - 感谢所有提供的帮助,我很感激。

SELECT 
tblElectricReadings.[Building], 
MONTHNAME(MONTH(tblElectricReadings.[Reading Date])) AS MonthRecorded, 
SUM(IIF(tblElectricReadings.[Reading Date] >= DATEADD("yyyy",-1,NOW()), (tblElectricReadings.[End Meter] - tblElectricReadings.[Start Meter]),0)) AS [Current Year Consumption], 
SUM(IIF(tblElectricReadings.[Reading Date] BETWEEN DATEADD("yyyy",-2,NOW()) AND DATEADD("yyyy",-1,NOW()), (tblElectricReadings.[End Meter] - tblElectricReadings.[Start Meter]),0)) AS [Previous Year Consumption] 
FROM tblElectricReadings 
WHERE tblElectricReadings.[Reading Date] >= DATEADD("yyyy",-2,NOW()) 
GROUP BY tblElectricReadings.[Building], MONTH(tblElectricReadings.[Reading Date]) 
ORDER BY MONTH(tblElectricReadings.[Reading Date]), tblElectricReadings.[Building]; 
+0

什么是你提示输入? – Andre

+0

对''“'进行求和似乎不是一个好主意,用'0'替代'IIf()'调用。 – Andre

+0

你为什么不在Access中创建一个传递查询?然后你可以粘贴你的mySql语句,就完成了! –

回答

0

不知道它是唯一的问题,但

SUM(IIF(tblElectricReadings.ReadingDate >= DATEADD("y",-1,NOW()), (tblElectricReadings.EndMeter - tblElectricReadings.StartMeter),"") 

显然是错误的:你不能SUM Strings,即使是空的。尝试改为:

SUM(IIF(tblElectricReadings.ReadingDate >= DATEADD("y",-1,NOW()), (tblElectricReadings.EndMeter - tblElectricReadings.StartMeter),0) 

并对其他事件也做同样的事情。

编辑:

我也认为你的ORDER BY子句是没有意义的,因为它试图订购的东西,不存在这样的输出数据集。它应该是:

ORDER BY MONTHNAME(tblElectricReadings.ReadingDate), tblElectricReadings.Building 
+0

谢谢帕特里克。绝对忽略了弦乐部分的总和,所以谢谢你的高举。我试图更换为0,但仍像以前一样有问题。不过谢谢:) – Luca