2017-09-25 78 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