2017-03-10 51 views
0

我有這樣着人物如何總結嵌套ID表

LEVEL_01 LEVEL_02 LEVEL_03 
---  ---   --- 
10010  10030  30010 
10010  10040  30030 
10010  10040  30040 
10020  20010  20080 
10020  10040  20080 
10020  10040  20090 
10021  20020  40000 

表並用最後一層的量的表

id   amount 
---  ------------- 
30010  100.00 
30030  190.00 
30040  800.00 
30040  700.00 
40000  250.00 
20080  320.00 
20090  500.00 

我需要的是展示從總數據三個級別,分組/嵌套級別,如:

10010->10030->30010 
10010->10040->30030 
10010->10030->30040 
------------------- 
10010=sum(30010)+sum(30030)+sum(30040)=(100.00)+(190.00)+(1500.00) = 1790.00 
10030=sum(30010)+sum(30040)=(100.00)+(1500.00) = 1600.00 
30040=sum(30040) = 1500.00 

(one record for LEVEL_10 thru LEVEL_03 and their relative sum. 

無法使其工作。任何幫助將不勝感激

+0

哪些DBMS您使用的? Postgres的?甲骨文? DB2?火鳥? –

回答

1

你可以做總和的結果爲每個級別,類似於連接,然後工會:

SELECT LEVEL_01, sum(amount) 
FROM table1 INNER JOIN table2 ON table1.level_03 = table2.id 
GROUP BY LEVEL_01 
UNION ALL 
SELECT LEVEL_02, sum(amount) 
FROM table1 INNER JOIN table2 ON table1.level_03 = table2.id 
GROUP BY LEVEL_02 
UNION ALL 
SELECT LEVEL_03, sum(amount) 
FROM table1 INNER JOIN table2 ON table1.level_03 = table2.id 
GROUP BY LEVEL_03; 
+0

該方法終於奏效。我試圖讓它在單個遞歸句子中工作而沒有成功。我把它作爲一些數據庫大師的任務。謝謝! –

+0

(我的意思是,我的表格樣本顯示了3個級別,真實情況有'n'級別)。 –

+0

我不認爲遞歸會在這裏工作,因爲你的數據已經被平化爲'n'列。爲此,您需要動態構建1到n列的SQL,然後提交動態構建的SQL。不好玩。 – JNevill