2017-11-08 4 views
0

다른 테이블의 다른 열의 합계로 업데이트 문을 수행하려고합니다. 나는 5 개 고객을 위해 나는이가 customer_ar.current_bal를 만들기 위해 실행 테스트로 조인을 사용하여 SQL 업데이트 문을 수행하는 방법은 무엇입니까?

customer_ar.current_bal to = sum(ar_transaction.current_balance) 

= 100 원하는 :

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); 

내가 가진 그 결과

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

다음 내가 이것을 실행 그것들 모두의 균형이 213823.85가되었다는 것입니다. 실제 현재 잔액은 고객마다 다르며 50에서 100 사이입니다.

하위 쿼리를 수행 할 수 있으며 한 번에 하나씩 만 수행하면 작동하지만, 한 번에 모든 일을 처리 할 수있는 방법. 내가 뭘 잘못하고 있는지 알아?

+3

어떤 DBMS를 사용하고 있습니까? – cChacon

+1

올바르게 태그를 지정하십시오. 어느 dbms ???????? 구문은 dbms와 다른 것입니다. – Eric

+0

"SQL"은 쿼리 언어의 표준입니다. 이 표준에는 "조인으로 업데이트"할 수있는 기능이 없습니다. 그래서 ** 사용하고있는 DBMS 제품을 ** 알려주고 있습니다. 포스트그레스? Orace? –

답변

0

SQL Server를 사용하는 경우이 스크립트를 사용할 수 있습니다.

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); 
+0

감사합니다. 고맙습니다. 처음 엔 가입 할 필요가없는 것 같습니다. – user3634056

-2

고객 당 트랜잭션에 대한 합계를 작성하려면 하위 쿼리의 행을 그룹화해야한다고 생각합니다.

어쩌면 이런 일이 (단지 아이디어를 얻기 위해) :

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을 게시 죄송합니다. 방금 예를 들어 봤습니다.

+0

OP가 SQL Server를 사용한다고 가정합니다. 가정하지 마십시오. – Eric

+0

나는 아무것도 가정하지 않았다. 저는 개인적으로 "SQL Server"로 일한 적이 없었습니다. – Flo

+0

게시 답변이 작동하지 않으면 엄지 손가락을 내릴 수 있습니다. – Eric

관련 문제