使用

2017-09-25 4 views
1

ディアーズ、言うこと使用

言うまでもなく、私は、MySQLで完全に正常に動作クエリは、Microsoft Accessに動作させるために私の心を失うされています。私はいくつかの例外があります。

これは、現在の1年前と同じ月の電気消費量を実際に建物ごとに比較した比較クエリです。

私が言ったように、それは完璧に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

'' ''での集計は良い考えのようには見えません。 'IIf()'の呼び出しを '0'で置き換えてください。 – Andre

+0

Accessでパススルークエリを作成してみませんか? mySqlステートメントを貼り付けるだけで済みます。 –

答えて

0

わからない、それが唯一の問題はなく

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

だが、明らかに間違っている:あなたはStrings、でも空のものを合計することはできません。代わりにお試しください:

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

他の場合も同様です。

EDIT:

私もそれが出力データ・セットでそのように存在していない何かに注文しようとしたので、ORDER BY句は意味がないと思います。それは以下のようになります:

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

ありがとうパトリック。間違いなく弦楽器の部分を見落としてしまったので、頭の中にありがとう。私は0に置き換えようとしましたが、以前と同じように問題が残っています。ありがとうございます:) – Luca