Как обновить таблицу несколько раз на основе другой таблицы - PullRequest
2 голосов
/ 29 марта 2019

Я пытаюсь обновить таблицу несколько раз на основе данных из другой таблицы.Ниже приведен дизайн таблицы, который у меня есть на данный момент:

Table A                          Table B
--------------------             --------------------
Goods    QTY    Type             Goods    QTY    Type
Wood      0       R1             Wood       1      R1
Wood     10       R2             Wood       4      R1
Glass    10       R1             Wood       5      R1
Glass     0       R2             Glass      5      R2
                                 Glass      4      R2

Итак, я хотел бы сделать сложение для QTY в таблице A на основе QTY из таблицы B. Также, если возможно, в одном операторе обновления.

Ожидаемый вывод выглядит примерно так:

Table A
--------------------
Goods    QTY    Type
Wood     10       R1 ---> Previous value: 0
Wood     10       R2
Glass    10       R1
Glass     9       R2 ---> Previous value: 0

Я уже пробовал использовать оператор обновления ниже, но безрезультатно:

UPDATE Table A
SET A.QTY = A.QTY + B.QTY
FROM Table A as A JOIN Table B as B ON A.Goods = B.Goods AND A.Type = B.Type

Однако приведенный выше оператор запроса только обновляетпервое отдельное значение в таблице B. Оно только обновляет QTY из Wood до 1 и QTY из Glass до 5.

Любая помощь приветствуется.

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Вы можете использовать встроенный подзапрос, например:

UPDATE TableA A
SET A.QTY = A.QTY + (
   SELECT SUM(B.QTY) FROM TableB B WHERE A.Goods = B.Goods AND A.Type = B.Type
)
0 голосов
/ 29 марта 2019

Во-первых, агрегируйте Table B путем суммирования поля Qty для каждой уникальной комбинации Goods & Type с использованием комбинации функции sum и предложения group by.

select t.goods, t.type, sum(t.qty) as tqty
from [table b] t
group by t.goods, t.type

Затем присоедините этот подзапрос к Table A:

update [table a] a join
(
    select t.goods, t.type, sum(t.qty) as tqty
    from [table b] t
    group by t.goods, t.type
) b 
on a.goods = b.goods and a.type = b.type
set a.qty = a.qty + b.tqty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...