2017-07-14 220 views
0

我有兩個表,其中包含各部門的原始數據和每個部門有多行的收入。我需要每個字段的總和,它的父部門是映射到另一個表中的數據。我有一個較長的版本,適用於個別部門的總結:
SELECT a.Dept, Sum(a.Earnings) as Earnings FROM Source AS a GROUP BY a.Dept;
我一直在努力的是我需要總結每個部門不是由其部門,而是由其父部門,這個映射信息是存儲在一個單獨的表格中。我嘗試了不同的連接,並沒有完全得到我期待的結果。這裏是我寫的一個(不正確的)查詢,它給了我父母部門的列表,但是排除了沒有父部門的部門,並且給出了錯誤的總數:
SELECT r.ParentDept, sum(a.Earnings) AS Earnings, FROM EarningsTable a inner JOIN ParentTable r ON a.Dept = r.Dept group by r.ParentDept;
以下是我想要實現的,提前致謝。SQL:Sum和groupby,groupby在另一個表中的條件

表1:
Dept Earnings 4 1000 4 16767 8 2456 9 2456 10 3456 3 36543 表2(映射表):
Dept ParentDept 4 1 8 1 9 2 10 2 3 3
表3(結果表):
ParentDept Earnings 1 20233 2 5912 3 36543

+0

如果沒有家長與部門關聯,你會如何分組部門? –

+0

如果沒有父母,那麼我需要的數據總結方式與我在初始查詢中的方式相同,只需通過其自己的部門 –

+0

希望答案能爲您工作。 –

回答

0

這裏是查詢,但對我已經測試了之情況的SQL Server:

select ISNULL(p.parentdept,c.dept),SUM(c.earning) from child c left join parent 
p on p.dept=c.dept group by ISNULL(p.parentdept,c.dept) 

對於MS-訪問NZ()是取代空值(NZ()相當於ISNULL())。

未經測試,但應該工作:

select NZ(p.parentdept,c.dept),SUM(c.earning) from child c left join parent 
p on p.dept=c.dept group by NZ(p.parentdept,c.dept) 

如果查詢不工作...希望至少你有一個想法來解決這個問題。 :)

+0

我使用了第二個例子,它完美地工作,非常感謝你的幫助!我也想感謝你讓我更多地瞭解新西蘭的功能!有用的信息 –

+0

您的歡迎:)很高興幫助你! –

0

請檢查該查詢可能是它的工作。

SELECT a.ID FROM ParentDept AS一個 GROUP BY a.ID(選擇(從收益耳其中dep.DepID = ear.EarningID)系如DEP SELECT SUM(ear.Earnings)作爲totalEarning);