Sql-Server
如何獲得欄位的總和並避免內部連接的重複?
我正在從 Accounts 表中提取 Geo,並根據名稱為“Brinks%”的帳戶按 Opportunity $$ Amt 對 Geos 進行排名。
賬戶是獨一無二的,每個賬戶都有很多機會。我需要從帳戶表中添加每個 Geo 的員工人數,但由於每個 Geo 有很多機會,我得到的數字是錯誤的。它似乎正乘以與之相關的機會數量。我需要更改我的加入嗎?我要添加子查詢嗎?我試過了,但我不認為我做得對。這是我寫的:
Select Ac.frm_GEO__c, sum(Op.Amount) Amt ,Rank () Over (Order By sum(Op.Amount) Desc) as 'Rank' ,sum(ac.NumberOfEmployees) num_empl FROM Account Ac Inner Join Opportunity Op on Op.AccountId=Ac.Id Where Ac.Name like 'Brinks%' Group by Ac.frm_GEO__c
我的結果如下所示。除了最後一列之外,一切都是正確的。
我會用一個子查詢來解決這個問題。我認為這將是您可以使用的最佳路線。一旦您加入,您就已將結果擴展到機會的粒度。永遠不要擴展到這種粒度,而是從子查詢中檢索計數會更容易:
Select Ac.frm_GEO__c, [SummarizedOpportunity].Amt ,Rank () Over (Order By [SummarizedOpportunity].Amt Desc) as 'Rank' ,sum(ac.NumberOfEmployees) num_empl FROM Account Ac JOIN (SELECT [Opportunity].[AccountId], [Amt] = SUM([Opportunity].[Amount]) FROM [Opportunity] GROUP BY [Opportunity].[AccountId]) [SummarizedOpportunity] ON [SummarizedOpportunity].[AccountId] = Ac.Id Where Ac.Name like 'Brinks%' Group by Ac.frm_GEO__c