Вопрос:

Как сделать заявление обновления SQL с объединением?

sql sybase sqlanywhere

588 просмотра

2 ответа

26 Репутация автора

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

customer_ar.current_bal to = sum(ar_transaction.current_balance)

В качестве теста я выполнил это, чтобы сделать customer_ar.current_bal = 100 для 5 клиентов:

update customer_ar
set current_bal=100
where customer_id in (1502,1329,3096,1516,3605);

Далее я запустил это:

update customer_ar C
join ar_transaction T on T.customer_id=C.customer_id
set current_bal =
(select sum(current_balance)
from ar_transaction
where C.customer_id =T.customer_id)
where C.customer_id in (1502,1329,3096,1516,3605);

В результате я получил баланс 213823,85. Фактический текущий баланс должен быть разным для каждого клиента, и между 50 и 100.

Я могу сделать подзапрос, и он сработает, если я сделаю это по одному, но я пытаюсь понять, есть ли способ заставить его выполнять их все одновременно. Вы видите, что я делаю не так?

Автор: user3634056 Источник Размещён: 08.11.2017 10:44

Ответы (2)


-2 плюса

53 Репутация автора

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

Может быть, что-то вроде этого (просто чтобы понять):

update customer_ar p
set current_bal = trans.sumBal
from customer_ar c
join (select customer_id, sum(current_bal) as sumBal from ar_transaction group by customer_id) trans on c.customer_id = trans.customer_id
where p.customer_id = trans.customer_id;

http://sqlfiddle.com/#!17/3dd88/14

Обновление: извините за публикацию этого недействительного SQL. Я только что исправил свой пример.

Автор: Flo Размещён: 08.11.2017 10:55

0 плюса

9556 Репутация автора

Решение

Если вы используете sql-сервер, вы можете использовать этот скрипт.

update customer_ar 
set current_bal = 
    (select sum(current_balance)
        from ar_transaction T1
     where T1.customer_id =customer_ar.customer_id)
where customer_id in (1502,1329,3096,1516,3605);
Автор: Serkan Arslan Размещён: 09.11.2017 07:22
Вопросы из категории :
32x32