2012-02-21 111 views
1

我花了一些時間研究這個,但沒有找到答案。SQL Server:插入一個聚合值

所以我有一個表叫WinterInspectionResults,我有另一個表稱爲InspectionResulsts,我想要做的是從第一個表插入到第二個表中的值。 有些情況下WinterInspectionResults將有多個條目對應InspectionResults中的一個條目。所以我使用sum()函數。 問題是,當我嘗試插入我的錯誤:

Violation of PRIMARY KEY constraint 'PK_InspectionResults'. 
Cannot insert duplicate key in object 'dbo.InspectionResults'. 

所以,也許我不明白的功能究竟是如何聚集工作。 有沒有其他人經歷過這個和/或知道如何解決它? 另外dbo.InspectionResults有一個聚合鍵,即兩個外鍵的組合。

感謝您的幫助,我找出問題所在。

+2

一些表strucutres和SQL將是有益的值。我猜你需要用臨時表編寫一些T-SQL,但我不知道沒有多少信息就會看到它的樣子。 – NickHeidke 2012-02-21 19:56:36

+0

請向我們展示一些代碼 – 2012-02-21 19:57:27

+0

您可以發佈您的表結構和您正在使用的查詢是否正在生成錯誤? – Taryn 2012-02-21 19:59:59

回答

1

我猜測它對您的SUM沒有問題,但您試圖插入InspectionResults上已存在的值。您應該確認您沒有插入重複項。這樣的事情:

INSERT INTO InspectionResults(List of your columns) 
SELECT A.* 
FROM ( SELECT [Key Columns Of InspectionResults], SUM([Agreggated Column]) 
     FROM WinterInspectionResults 
     GROUP BY [Key Columns Of InspectionResults]) A 
LEFT JOIN InspectionResults B 
ON A.[Key Columns Of InspectionResults] = B.[Key Columns Of InspectionResults] 
WHERE B.[Key Columns Of InspectionResults] IS NULL 
0

我假設你的表只由ID和值組成。您可以調整的任何其他字段。 你所缺少的是檢查不插入上已有InspectionResulsts

insert into InspectionResulsts (ID, VALUE) 
select WI.ID, SUM(WI.VALUE) 
from WinterInspectionResults WI 
where WI.ID not in (select ID from InspectionResulsts)