在 table 中合并 2 行

Combining 2 rows in table

我有以下数据:

-------table_a-------
| id | data | value |
| 1  |   5  |   1   |
| 2  |   3  |   3   |

我想要的输出是将第 2 行与第 1 行合并,以便 id = 1 处的数据保留为 =5,但添加了值,因此 1+3

-------table_a-------
| id | data | value |
| 1  |   5  |   4   |

这是我对查询的了解,但第一个似乎不起作用。此外,这不是用于检索数据,而是用于操作数据库中的数据。

当前查询(第一个不工作):

UPDATE table_a SET value = value + (SELECT a.value FROM table_a  a WHERE a.id = 2) WHERE id = 1;
DELETE FROM table_a WHERE id = 2;

这是一种通过将 table 与其自身连接来创建累积列的方法。

我假设 Id 列是标识列, 希望这有帮助。

CREATE TABLE [dbo].[TestTable](
    [id] [int] NULL,
    [data] [int] NULL,
    [value] [int] NULL
) ON [PRIMARY]

INSERT INTO [dbo].[TestTable]
           ([id]
           ,[data]
           ,[value])
     VALUES
            (1,5,1),
            (2,3,3),
            (3,4,4)


SELECT  a.id , a.data , a.value + b.value as Sum
FROM    [TestTable] a
    left join [TestTable] b
        on a.id + 1 = b.id

如果这是您想要的逻辑:

UPDATE table_a
    SET value = value + (SELECT a.value FROM table_a  a WHERE a.id = 2)
    WHERE id = 1;
DELETE FROM table_a WHERE id = 2;

update 将不起作用,因为您无法在查询的其余部分引用正在更新的 table。您可以使用 hack 进行更新并执行以下操作:

UPDATE table_a
    SET value = value + (SELECT value FROM (SELECT a.value FROM table_a  a WHERE a.id = 2) )
    WHERE id = 1;

select 解决了这个问题。更正确的方法是使用 join:

UPDATE table_a a CROSS JOIN 
       (SELECT a.value FROM table_a  a WHERE a.id = 2) as a2
    SET a.value = a.value + a2.value
    WHERE id = 1;

这会起作用,请检查。

UPDATE table_a,
(SELECT value as val FROM table_a where id = 2) AS t2
SET table_a.value = table_a.value+t2.val
where table_a.id = 1;

DELETE from table_a where id = 2;