2016-11-10 11 views
0

私はこれを今のところ働かせようとしています。私は3つのテーブルを持っています。最初のテーブルには、CustomerID、DateOfSales(常に月の最初の日付)を含む顧客のSalesがあります。 2番目のテーブルにはCustomerName、CustomerIDがあります。 3番目の表は、どの顧客がどの製品ラインを購入しているかを示しています。それらはCustomerID、ProductIDによって格納されます。Access 2002 3つのテーブルを結合するためのSQL

私は、Salesから特定のProductIDとmaxDateを購入しているとみなされるすべての顧客を持つリスト(1つのSQLからうまくいけばよい)を取得したいと考えています。私はその顧客のために販売がある場合それらのすべてを得ることができます。売り上げがない場合は、特定のProductIDとmaxDateをSalesから購入するすべての顧客または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秒たい:

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" に構文エラーを示します。おそらくAccess 2002がその責任を負うだろう。 : –

+0

@J_K_M_A_N ...忘れてしまったMS Accessは外部結合のための通常の構文をサポートしていません –

+0

WOW!ありがとうございます!wbw.ProductID = 17を追加しなくてはなりませんでした。今それは動作します! –

関連する問題