0

Microsoft Access に 3 つのテーブルがあります。

  • 表 1 には、さまざまな会社の名前と、それぞれに対応する一意の ID (会社に関するその他の一意の情報と共に) が含まれています。
  • 表 2 は、2013 年からの各企業の売上情報です。
  • 表3には、2014年からの各販売情報が含まれています。

    表 2 と 3 では、異なる州での販売に対応して、1 つの会社が複数回リストされていることがよくあります。

表 2 と 3 では、会社名は実際には対応する ID 番号であり、ルックアップを使用して名前を表示しています。したがって、Table1 は Table2 と Table3 の親です。

表 2 と表 3 の売上高の合計とともに、各企業を 1 回だけリストするクエリを作成したいと考えています。一定のスカラー (たとえば、ある企業は本来あるべき売上のちょうど 16 倍の売上を表示します)。何が起きてる?

Access で SQL を表示すると、次のようになります。

SELECT Table2.CompanyName,
       Sum(Table2.TotalRevenue) AS [2013 Revenue],
       Sum(Table3.TotalRevenue) AS [2014 Revenue]
FROM (Table1 INNER JOIN Table2 ON Table1.Company_ID = Table2.CompanyName)
   INNER JOIN Table3 ON Table1.Company_ID = Table3.CompanyName
GROUP BY Table2.CompanyName;

これらの Revenue 値が複数回取得されるのはなぜですか? ありがとうございました!

4

3 に答える 3

1

Table2 と Table3 は会社レベルではないため、複数の値を取得しています。彼らは販売レベルです(私は推測します)。したがって、各テーブルには顧客ごとに複数のレコードがあります。それらを結合するcompany_idと、Table2 の各レコードがそれぞれの Table3 の各レコードに結合されますcompany_id

これをよりよく理解したい場合は、クエリをSELECT * FROM...同じ結合で変更してください。2013 年の記録ごとに、2014 年の記録が多数あることがわかります。意味がないため、集計はあまり意味がありません。

代わりに、結合する前に次のように合計することを検討してください。

SELECT Table2.CompanyName,
       t2.TotalRevenue AS [2013 Revenue],
       t3.TotalRevenue AS [2014 Revenue]
FROM 
    Table1 
    INNER JOIN (SELECT Company_Id, CompanyName, sum(TotalRevenue) as TotalRevenue FROM Table2 GROUP BY COmpany_ID, CompanyName) as t2 ON Table1.Company_ID = T2.CompanyName)
    INNER JOIN (SELECT Company_Id, CompanyName, sum(TotalRevenue) as TotalRevenue FROM Table3 GROUP BY COmpany_ID, CompanyName) as t3 ON Table1.Company_ID = T3.CompanyName
GROUP BY T2.CompanyName;
于 2016-03-02T15:06:50.113 に答える