2012-02-21 3 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

+0

, пожалуйста, покажите нам код –

+0

, можете ли вы опубликовать свою структуру таблицы и ваш запрос, который вы используете, что порождает ошибку? – Taryn

ответ

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

Im предполагая, что ваши таблицы сделаны только из идентификатора и значения. Любые другие поля, которые вы можете настроить. Что вам не хватает является проверка, чтобы не вставить значения, которые уже находятся на InspectionResulsts

insert into InspectionResulsts (ID, VALUE) 
select WI.ID, SUM(WI.VALUE) 
from WinterInspectionResults WI 
where WI.ID not in (select ID from InspectionResulsts) 
Смежные вопросы