程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> select-ACCESS數據庫執行LEFT JOIN存在的問題

select-ACCESS數據庫執行LEFT JOIN存在的問題

編輯:編程綜合問答
ACCESS數據庫執行LEFT JOIN存在的問題

首先說明:
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.時間 

  • 單獨查的結果
  • DT表記錄
  • 時間 車牌號
  • 2015-01 A
  • 2015-02 A
  • 2015-03 A
  • 2015-01 B
  • 2015-02 B
  • 2015-03 B

  • AA表記錄

  • 時間 車牌號 燃油費

  • 2015-02 A 300

  • 2015-02 B 500

我**預期的效果**是選擇一個時間段,比如開始日期選擇2015-01,結束日期選擇2015-03,但是只有2月份有數據,因此查詢出來的數據列表應該如下顯示:

  • 時間 車牌號 燃油費
  • 2015-01 A 0
  • 2015-02 A 300
  • 2015-03 A 0
  • 2015-01 B 0
  • 2015-02 B 500
  • 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有太多應該但是卻依然不符合常理的東西。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved