使用新插入的分组行的ID更新分组的行

时间:2020-02-14 10:24:10

标签: sql-server tsql group-by sql-update sql-insert

我想对表A的几行进行分组,并为每组分组的行向表B中插入新行。 接下来,我想用新插入的行的ID更新表A的行。

使用'grouplines'将行插入表中就像

INSERT INTO B(...,...,...)
SELECT col1, col2 FROM A
GROUP BY col1,col2 

这将在表B中产生ID列表。我想用表B的相应组行的ID更新表A的行。

可以这样做吗?

一些示例数据:

enter image description here

对表B进行分组后,如下所示:

enter image description here

然后表A应该看起来像:

enter image description here

2 个答案:

答案 0 :(得分:1)

实际上,您的查询可能会插入多个行。

我认为一个解决方案将使用两个查询:首先从表a中插入表b,使用表b中具有新创建的ID的更新表a。


INSERT INTO B(col1, col2, col3)
SELECT DISTINCT col1, col2, col3 FROM A

UPDATE A
SET A.B_ID = B.B_ID
FROM A
INNER JOIN B
    ON  A.col1 = B.col1
    AND A.col2 = B.col2
    AND A.col3 = B.col3

答案 1 :(得分:0)

Deme on db<>fiddle

您可以通过使用Row_Number来获得表B,如下所示:

Select ROW_NUMBER() OVER(ORDER BY Category) as ID, Name, Category
into #B
from #A
group by Name, Category

然后像这样与表B联接后更新表A

Update a
set a.ID_Of_Group_row = b.ID
from #A a
inner join #B b on a.Category = b.Category 

输出

enter image description here