Вы можете использовать временную таблицу для хранения вычисленных значений, удаления их из таблицы, соединив их по Id, Key, Type и вставив их заново. Таким образом, вы получите различные значения в таблице и удалите дубликаты. Я привел пример, как вы можете это сделать.
Примечание: я поместил sql-код в транзакцию и комментировал коммит, так что вы можете легко протестировать его.
BEGIN TRAN PrototypeExample
-- create temp table where we will store calculated data
CREATE TABLE #tempValues(
Id INT,
[Key] INT,
[Type] INT,
Value1 INT,
Value2 INT
)
-- insert calculated values into temp table
INSERT INTO
#tempValues
(
Id,
[Key],
[Type],
Value1,
Value2
)
SELECT
e.Id,
e.[Key],
e.[Type],
SUM(e.Value1) Value1,
SUM(e.Value2) Value2
FROM
example e
GROUP BY
e.Id,
e.[Key],
e.[Type]
-- show data
SELECT * FROM #tempValues
-- delete data from my table
DELETE
e
FROM
example e
INNER JOIN
#tempValues t
ON
e.Id = t.Id
AND
e.[Key] = t.[Key]
AND
e.[Type] = t.[Type];
-- insert data from temp table
INSERT INTO
example
(
Id,
[Key],
[Type],
Value1,
Value2
)
SELECT
t.Id,
t.[Key],
t.[Type],
t.Value1,
t.Value2
FROM
#tempValues t
-- new data populated
SELECT * FROM example
-- delete temp table
IF OBJECT_ID('tempdb..#tempValues') IS NOT NULL DROP TABLE #tempValues
-- for testing
ROLLBACK TRANSACTION PrototypeExample
-- if you find it useful, commit
-- COMMIT TRANSACTION