首先說明:
1. 該SQL語句用於ACCESS執行。
1. 為表述清楚,SQL中的參數本來應該是“?”,我寫成了英文begin和end表示開始時間和結束時間。
1. 問題:當單個執行FROM語句後每個SELECT語句時,可以查詢出來數據。可是用LEFT JOIN後,查不出數據了。當把ON的條件放寬為“DT.時間 =AA.時間”或者“DT.車牌號 = AA.車牌號”時都有數據,但是這樣做不符合檢索要求。請各位同仁幫忙看看
SELECT DT.時間,DT.車牌號,
IIF(AA.燃油費 IS NULL, 0,AA.燃油費) AS 燃油費
FROM
(SELECT FORMAT(DATEADD('m',BS.NUM,begin),'yyyy年MM月') AS 時間,
BC.車牌號
FROM B_SYSDATE AS BS, B_車輛信息表 AS BC
WHERE BS.NUM <= DATEDIFF('m',begin,end) ) AS DT
LEFT JOIN
(SELECT FORMAT(A.交易時間,'yyyy年MM月') AS 時間 ,
SUM(A.金額) AS 燃油費,B.車牌號
FROM A_車輛充油明細 AS A ,B_車輛信息表 AS B
WHERE A.卡號 = B.油卡號 AND A.交易時間 BETWEEN begin AND end
GROUP BY FORMAT(A.交易時間,'yyyy年MM月'),A.卡號,
B.車牌號) AS AA
ON DT.時間 =AA.時間 AND DT.車牌號 = AA.車牌號
ORDER BY DT.車牌號,DT.時間
2015-03 B
AA表記錄
時間 車牌號 燃油費
2015-02 A 300
2015-02 B 500
我**預期的效果**是選擇一個時間段,比如開始日期選擇2015-01,結束日期選擇2015-03,但是只有2月份有數據,因此查詢出來的數據列表應該如下顯示:
2015-03 B 0
但是使用JOIN查詢後的實際記錄集如下:
時間 車牌號 燃油費
2015-01 A 0
2015-02 A 0
2015-03 A 0
2015-01 B 0http://ask.csdn.net/#
2015-02 B 0
2015-03 B 0
最終還是自己搞定。現在和大家分享一下。
我將ON條件修改為“ON **DT.時間 =FORMAT(AA.時間,'yyyy年MM月') **AND DT.車牌號 = AA.車牌號 ”
紅色部分為修改部分。其實按照SQL語句看,AA.時間的格式本來就是'yyyy年MM月',但是系統就是不認,所以就二次格式化,結果就認了。ACCESS有太多應該但是卻依然不符合常理的東西。