2017-08-04 26 views
1

我需要編寫一個SQL查詢,根據每個表中的公共字段的分組將總共來自兩個不同表(保險和投資)的字段(BranchRevenue)組成一個數字的SQL查詢(BrokerName )。數據庫是MS Access(我在下面的超鏈接中提供了一個示例結構)。從MS Access中的2個表中總結

enter image description here

我從看的如此相似職位的理解是,我需要定義從各個表的款項(這是我可以做的),然後使用DISTINCT或DISTINCTROW(我做不到聚集在一起)。

以下是每個表單獨的查詢,它們通過BrokerName正確合計BranchRevenue。

SELECT Investments.BrokerName AS [BrokerName],Sum(Investments.BranchRevenue) as [BranchRevenue] 
FROM Investments WHERE (((Investments.Ledger = 'Actual') AND (Investments.Year1 = 2017) AND (Investments.Period = 6) AND (Investments.Branch = 'Toronto'))) 
GROUP BY Investments.BrokerName 

SELECT Insurance.BrokerName AS [BrokerName],Sum(Insurance.BranchRevenue) as [BranchRevenue] 
FROM Insurance WHERE (((Insurance.Ledger = 'Actual') AND (Insurance.Year1 = 2017) 
    AND (Insurance.Period = 6) AND (Insurance.Branch = 'Toronto'))) 
GROUP BY Insurance.BrokerName 

如何使用單個SQL語句來完成此操作?

理想的解決方案將正確地將兩個表的BranchRevenue合併爲每個BrokerName的一個數字,而不從兩個表中複製數據。

回答

0

你可以做一個簡單的UNION ALL查詢,然後組

select BrokerName, sum(BranchRevenue) from (
select * from Insurer 
    where... 
union all 
select * from Investments 
    where ...) 
group by BrokerName 
1

你可以使用union all總結前兩個表中的結果相結合:

SELECT [BrokerName], SUM([BranchRevenue]) 
FROM  (SELECT Investments.BrokerName AS [BrokerName], 
       Investments.BranchRevenue AS [BranchRevenue] 
      FROM Investments 
      WHERE Investments.Ledger = 'Actual' AND 
       Investments.Year1 = 2017 AND 
       Investments.Period = 6 AND 
       Investments.Branch = 'Toronto' 
      UNION ALL 
      SELECT Insurance.BrokerName AS [BrokerName], 
       Insurance.BranchRevenue AS [BranchRevenue] 
      FROM Insurance 
      WHERE Insurance.Ledger = 'Actual' AND 
       Insurance.Year1 = 2017 AND 
       Insurance.Period = 6 AND 
       Insurance.Branch = 'Toronto' 
     ) t 
GROUP BY [BrokerName] 
+0

該解決方案完美地工作。非常感謝您的快速幫助。 =) – darryl444