2014-06-25 60 views
0

我們的數據庫中有一些表幾乎無限增長,因此我們試圖創建定期(可能每天)彙總舊數據併除去彙總中包含的記錄的任務。如何在SQL Server中彙總一個表並將子表彙總爲正確引用SQL Server中彙總的父行

這只是使用GROUP BY很容易做到的。值得一提的是,子表也需要彙總,並引用他們所引用的新的完成父錶行,並且我不知道如何做到這一點,而不做一些真正的蹩腳的子查詢。

作爲一個例子說我開始與兩個表中的以下數據:

父表(ID是標識列)

ID Type Amount 
-- ---- ------ 
1  1 10.00 
2  1 3.00 
3  3 8.00 
4  3 9.00 

子表

ParentID Thing Qty 
-------- ----- --- 
     1  8 3 
     1  6 6 
     2  8 4 
     2  5 3 
     3  8 2 
     3  5 1 
     4  5 4 

首先,我會將父表格彙總到根據類型分組的新行中,然後將這些金額彙總在一起,從而得出以下結果:

ID Type Amount 
-- ---- ------ 
5  1 13.00 
6  3 17.00 

創建上述數據在家長的查詢將看起來像下面的查詢:

INSERT INTO Parent (Type, Amount) 
SELECT Type, SUM(Amount) AS Amount 
FROM Parent 
GROUP BY Type 

對於子表我想要做同樣的事情,除了由「物」的分組和總結帶有ParentID的數量引用與原始父對應的新創建的Parent。這將產生像下面這樣:

ParentID Thing Qty 
-------- ----- --- 
     5  8 7 
     5  5 3 
     5  6 6 
     6  5 5 
     6  8 2 

該查詢將類似於下面的東西,但我不知道如何讓PARENTID或如何鏈接到父表:

INSERT INTO Child (ParentID, Thing, Qty) 
SELECT ?, Thing, SUM(Qty) AS Qty 
FROM Child 
INNER JOIN Parent 
    ON ? = ? 
GROUP BY ?, Thing 

我會認爲這是有點頻繁發生的事情,所以沒有人知道處理這種情況的正確方法是什麼?

+0

Parent.Type和Child.Group是平等的?我的意思是它們被命名爲differentlt,但是它們是否引用了相同的內容? – NeedAnswers

+0

可以檢查下面給出的查詢並回收 – Azar

+0

Parent.Type和Child.Group不打算以任何方式相關。他們只是我編造的一些隨機數據。他們可以是任何價值。 –

回答

0

第一個表:

Declare @max int = (Select MAX(ID) from parent) 
Select @max 

Select @max+R ID,type,Amount 
from 
(
Select type,sum(amount) 'Amount',ROW_NUMBER() over(order by type) 'R' 
from parent 
group by Type 
) R 

二表:

Select @max+TYPE 'ParentID',[group],sum(Qty) 'Qty' 
from child 
join parent 
on id = parentid 
group by type,[group] 
order by [parentid],[group] 
+0

有趣的理論,但類型不保證開始在一個特定的價值或包括序列中的所有值(他們可能是2,5,7)或類似的東西。 –

+0

類型與父表的類型不一樣嗎? – Azar

+0

父表具有類型。子表有Group。他們不相關。 –