2016-09-12 4 views
1

Microsoft Access 2016で、特定のイベントの費用、イベントが生成した兆候の合計、年、イベントの説明の合計を表示するクエリの作成に問題があります会社名。MS SUMを使用して重複値にアクセスする

私は単純なものを紛失していると思います。誰かがそれを指摘したら、ばかげていると思います。うまくいけば、自分の質問を整理して見つけやすくなりました。

私がテストしているダミーデータとともに、関連するテーブルがあります。

All_Company   Company_Event    

------------------ --------------------------- 
| ID | Company | | ID | EventDescription | 
|------|---------| |----|--------------------| 
| 1 | Crapple | | 1 |  Concert  | 
| 2 | Rito | | 2 |  Party  | 
------------------ --------------------------- 

Company_Target_Actual 
---------------------------------------------------------------- 
| All_CompanyID | Company_EventID | Year | Quarter | Signed | 
|----------------|-------------------|------|---------|--------| 
|  1  |   2   | 2015 | 1 | 1 | 
|  1  |   2   | 2015 | 2 | 0 | 
|  1  |   2   | 2015 | 3 | 3 | 
|  1  |   2   | 2015 | 4 | 1 | 
---------------------------------------------------------------- 

Budget_Company_Expense 
--------------------------------------------------------------------------------- 
| ID | All_CompanyID | Company_EventID | Year | Category | SubCategory| Expense | 
--------------------------------------------------------------------------------- 
| 1 |  1  |  2  | 2015 | ABCD | 123  | 40 | 
| 2 |  1  |  2  | 2015 | ABCD | cat  | 113 | 
| 3 |  1  |  2  | 2015 | ABCD | dog  | 71 | 
--------------------------------------------------------------------------------- 

これは、私はそれを読みやすくするために、コードの醜いアクセス長い行からそれを解散し、クエリのために私のコードです。

SELECT DISTINCTROW All_Company.Company, Budget_Company_Expense.Year, 
Budget_Company_Expense.Company_EventID, Company_Event.EventDescription, 
Sum(Budget_Company_Expense.Expense) AS [Sum Of Expense USD], 
Sum(Company_Target_Actual.Signed) AS [Sum Of Signed] 
FROM Company_Event 
    INNER JOIN ((All_Company 
    INNER JOIN Company_Target_Actual 
    ON All_Company.[ID] = Company_Target_Actual.[All_CompanyID]) 
INNER JOIN Budget_Company_Expense 
    ON All_Company.[ID] = Budget_Company_Expense.[All_CompanyID]) 
    ON Company_Event.[ID] = Budget_Company_Expense.[Company_EventID] 
GROUP BY All_Company.Company, Budget_Company_Expense.Year, 
Budget_Company_Expense.Company_EventID, Company_Event.EventDescription; 

、ここであなたが見ることができるように、総兆候は(5)Company_Target_Actualに3回(エントリ数が起こったかのように、それは合算され

Result 
------------------------------------------------------------------------------------------- 
| Company | Year | Company_EventID | EventDescription | Sum of Expense USD | Sum of Signed| 
------------------------------------------------------------------------------------------- 
| Crapple | 2015 |  2  |  Party  |  $896.00  |  15  | 
------------------------------------------------------------------------------------------- 

私のクエリを実行した結果でありますテーブル)とその逆の費用。私の問題についての助けがあれば大いに感謝します。 私の間違いを見つけるのに役立つ情報を忘れてしまったら、私に何を提供できるのか教えてください!

+0

まず、すべての会社から選択を開始してから、最初の結合を左の結合に変更します。実際のテーブルのドル金額も足りない。あなたは予算から実際の金額を得るべきです。 –

答えて

0

クエリを2つの集計に分割することをお勧めします.1つはCompany_Target_ActualのSignedと、Business_Company_Expenseの合計はExpenseです。次に、グループ化要因であるCompany、Event、およびYearで2つのクエリを結合します。

以下は、2つの派生テーブル(FROM/JOINのサブクエリ)を使用しています。ただし、どちらか一方を別のクエリとして保存してから最終クエリで結合することができます。

SELECT t1.Company, t1.Year, t1.Company_EventID, t1.EventDescription, 
     t2.[Sum Of Expense USD], t1.[Sum of Signed] 
FROM 

    (SELECT ac.ID AS CompanyID, ac.Company, ca.Year, ca.Company_EventID, ev.EventDescription, 
      SUM(ca.Signed) AS [Sum Of Signed] 
    FROM (Company_Target_Actual ca 
    INNER JOIN Company_Event ev 
      ON ca.Company_EventID = ev.ID) 
    INNER JOIN All_Company ac 
      ON ca.All_CompanyID = ac.ID 
    GROUP BY ac.ID, ac.Company, ca.Year, ca.Company_EventID, ev.EventDescription) AS t1 

INNER JOIN 

    (SELECT ac.ID AS CompanyID, ac.Company, be.Year, be.Company_EventID, ev.EventDescription, 
      SUM(be.Expense) AS [Sum Of Expense USD] 
    FROM (Budget_Company_Expense be 
    INNER JOIN Company_Event ev 
      ON be.Company_EventID = ev.ID) 
    INNER JOIN All_Company ac 
      ON be.All_CompanyID = ac.ID 
    GROUP BY ac.ID, ac.Company, be.Year, be.Company_EventID, ev.EventDescription) AS t2 

ON t1.CompanyID = t2.CompanyID 
AND t1.Company_EventID = t2.Company_EventID 
AND t1.Year = t2.Year 
+0

これは完全に機能し、私がそれに近づいていた方法よりもはるかに理にかなっています。どうもありがとうございます。 – KatherineP

関連する問題