2016-11-10 77 views
0

我一直試圖讓這個工作一段時間。我有3張桌子。第一張表的客戶銷售額包含CustomerID,DateOfSales(總是具有本月的第一個月)。第二個表具有CustomerName,CustomerID。第三張表有哪些客戶購買什麼產品線。它們由CustomerID,ProductID存儲。訪問2002 SQL加入三個表

我想獲得一個列表(希望從一個SQL中獲得),其中包含所有列爲購買某個ProductID和來自銷售的maxDate的客戶。如果這個客戶有銷售,我可以得到他們全部。如果找不到銷售額,我會得到所有購買特定產品ID和銷售額maxDate的客戶,或者獲得NULL嗎?

SalesList |CustomerList|WhoBuysWhat 
----------|------------|----------- 
maxDate |CustomerID |CustomerID 
CustomerID|   |ProductID=17 

這和我一樣近。它獲得所有的最大日期,但只有在有銷售額的情況下。如果沒有銷售記錄,我需要CustomerID和maxDate的NULL。

SELECT WhoBuysWhat.CustomerID, CustomerList.CustomerName, 
Max(SalesList.MonthYear) AS MaxOfMonthYear FROM (CustomerList INNER 
JOIN SalesList ON CustomerList.CustomerID = SalesList.CustomerID) INNER 
JOIN WhoBuysWhat ON CustomerList.CustomerID = WhoBuysWhat.CustomerID 
WHERE (((SalesList.ProductID)=17)) GROUP BY WhoBuysWhat.CustomerID, 
CustomerList.CustomerName; 

是否可以或我需要使用多個SQL語句?我知道我們應該得到比Access 2002更新的東西,但這就是他們所擁有的。

回答

1

你想LEFT JOIN S:

SELECT cl.CustomerID, cl.CustomerName, 
     Max(sl.MonthYear) AS MaxOfMonthYear 
FROM (CustomerList as cl LEFT JOIN 
     (SELECT sl.* 
     FROM SalesList sl 
     WHERE sl.ProductID = 17 
    ) as sl 
     ON cl.CustomerID = sl.CustomerID 
    ) LEFT JOIN 
    WhoBuysWhat wbw 
    ON cl.CustomerID = wbw.CustomerID 
GROUP BY cl.CustomerID, cl.CustomerName; 
+0

這給了我一個語法錯誤的 「AND」。訪問2002年可能是在那裏。 :( –

+0

@J_K_M_A_N。我忘了。MS Access不支持正常的語法外連接。 –

+0

哇!謝謝!我不得不添加WHERE wbw.ProductID = 17(不,我是讓所有的客戶),但現在它工作! –