Объединить строки в одной таблице SQL - PullRequest
0 голосов
/ 13 января 2019

У меня есть одна таблица со строками типа

ID | Key   | Value1 | Value2 | Type  
55 | 012018| 0      | 0      |  1   
55 | 012018| 50     | 10     | 1  

Мне нужно обновить эту таблицу, чтобы удалить эти дубликаты, чтобы мои ID, KEY и Тип были , совпадающими , а Value1 и Value2 были добавлены .

Получить результат как

ID | Key   | Value1 | Value2 | Type  
55 | 012018| 50     | 10     |  1 

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вы можете использовать временную таблицу для хранения вычисленных значений, удаления их из таблицы, соединив их по 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
0 голосов
/ 13 января 2019

Я думаю, вы хотите просто сгруппировать их по идентификатору, ключу, типу

SELECT ID, Key, SUM(Value1) AS Value1, SUM(Value2) AS Value2, Type
FROM TABLE
GROUP BY ID, Key, Type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...