Обновить сгруппированные строки с помощью идентификатора вновь вставленной строки группировки - PullRequest
1 голос
/ 14 февраля 2020

Я хочу сгруппировать несколько строк таблицы A и вставить новую строку в таблицу B для каждой группы сгруппированных строк. Затем я хочу обновить строки таблицы A с помощью идентификатора вновь вставленной строки.

Вставка строк в таблицу с помощью 'grouplines' выглядит так:

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

Это создаст список идентификаторов в таблице B. Я хочу обновить строки таблицы A идентификатором соответствующей группы строк таблицы B.

Есть ли возможность сделать это?

Некоторые примеры данных:

enter image description here

После группировки таблица B выглядит следующим образом:

enter image description here

И тогда таблица A должна выглядеть следующим образом:

enter image description here

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

В действительности ваш запрос потенциально может содержать более одной строки.

Я думаю, что одно решение будет использовать два запроса: сначала вставить в таблицу b из таблицы a, обновить таблицу a с вновь созданным идентификатором (s) из таблицы b.


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
0 голосов
/ 15 февраля 2020

Deme on db <> fiddle

Вы можете достичь таблицы B, используя Row_Number, как показано ниже

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

Затем обновите таблицу A после объединения с таблица B, как

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...