table a
a | total_amt | |
1 | 11 | 600 |
table b
a | a_seq | amt | |
1 | 11 | 01 | 100 |
2 | 11 | 02 | 200 |
3 | 11 | 03 | 300 |
table B에 A필드에 들어있는 동일한 값을 찾아 AMT값을 모두 합하여
table A에 Total_AMT필드에 update를 해야하는데.....
어떤 방식으로 쿼리를 만들어야 할지 몰라서 질문을 드려봅니다.
초보라 질문드리는 부분이 많네요...
선배님들 부탁드립니다...좋은하루되세요..^^
Comment 12
-
SQL왕왕초보
2013.11.06 15:46
-
군고구마
2013.11.06 15:48
CREATE TABLE TABLE_B(ID INT,A INT,A_SEQ VARCHAR(5),AMT INT)GOCREATE TABLE TABLE_A(ID INT IDENTITY(1,1),A INT,TOTAL_AMT INT)GOINSERT INTO TABLE_B VALUES(1,11,'01',100)INSERT INTO TABLE_B VALUES(2,11,'02',200)INSERT INTO TABLE_B VALUES(3,11,'03',300)INSERT INTO DBO.TABLE_A (A,TOTAL_AMT)SELECT A,SUM(AMT)AS TOTALFROM DBO.TABLE_B WITH(NOLOCK)GROUP BY ASELECT * FROM TABLE_A이렇게 해보세요 ^^테이블 구조가 어떻게 되어있는지는 모르겠지만이렇게 하면 집계해서 넣을 수 있습니다. -
SQL왕왕초보
2013.11.06 15:52
답변감사합니다.
Total_amt라는 필드에 값이 들어있는데 그럼 인써트 구문만 바꿔적용하면 가능할까요?
쿼리를 보다보니 한가지 궁금한점이 생겼는데요
From 절에 WITH(NOLOCK)<<이게 정확하게 뭘 의미하는지 여쭤봐두 될까요?^^;
-
군고구마
2013.11.06 15:55
필드에 이미 TOTAL_AMT로 들어가 있다는 뜻은 업데이트를 시켜줘야 한다는 말씀이신가요?
WITH (NOLOCK)은
http://blog.naver.com/waws01/60184099145
참조하세요 ^^
-
SQL왕왕초보
2013.11.06 15:57
아 아니요 다른 엉뚱한 값이 있어서 합산을 하여서 합산한 값을 업데이트 시켜줘야 해요...
아무리 검색을 해봐도 원하는 답을 찾을수가 없어서...ㅜ.ㅜ
-
군고구마
2013.11.06 16:03
아래쪽에 완벽한 답변을 달아주셨네요 ^^
-
건우아빠
2013.11.06 15:58
update aset a.TOTAL_AMT = b.TOTALfrom TABLE_A a join (SELECT A,SUM(AMT)AS TOTALFROM DBO.TABLE_B WITH(NOLOCK)GROUP BY A ) B on a.a = b.a -
SQL왕왕초보
2013.11.06 16:08
건우 아빠님 답변 감사드립니다.
질문을 예로 드린거고 현재 제가 작성한 쿼리인데요
쿼리 문제점이 뭔지 알수 있을까요?ㅜㅜ
begin tran
update pohd set a.po_item_amt = sum(b.po_item_amt)
select a.po_no, sum(b.po_item_amt)total
from pohd a, podt b
where a.buyer_company = b.buyer_company
and a.buyer_division = b.buyer_division
and a.seller_company = b.seller_company
and a.seller_division = b.seller_division
and a.po_no = b.po_no
and a.sup_receive_date = b.sup_receive_date
and a.sup_receive_time = b.sup_receive_time
and a.if_version = b.if_version
and b.buyer_division = 'bx11'
group by a.po_no -
건우아빠
2013.11.06 16:13
실행이 안될듯 합니다.
인라인뷰로 하면 복잡하게 보여서 with 절로 표현합니다.
with res as (
select a.po_no, sum(b.po_item_amt)total
from pohd a, podt b
where a.buyer_company = b.buyer_company
and a.buyer_division = b.buyer_division
and a.seller_company = b.seller_company
and a.seller_division = b.seller_division
and a.po_no = b.po_no
and a.sup_receive_date = b.sup_receive_date
and a.sup_receive_time = b.sup_receive_time
and a.if_version = b.if_version
and b.buyer_division = 'bx11'
group by a.po_no
)update a
set a.po_item_amt = sum(b.total)
from pohd a join res b on a.po_no = b.po_no
-
SQL왕왕초보
2013.11.06 16:20
답변 감사합니다
그대로 돌렸더니 에러가 났는데 초보라 문제점을 찾을수가 없네염.ㅠ.ㅠ
다시한번 답변 감사합니다 공부를 더 열심히 해야겟다는 생각만드네염..ㅠ_ㅠ
-
건우아빠
2013.11.06 16:25
update,delete 문은 select 문이 바로 올수 없습니다.
이걸 from절의 인라인뷰로 표현하셔야 합니다.
insert 문은 select문과 같이 이용 가능하구요...
-
SQL왕왕초보
2013.11.06 16:35
건우 아빠님께 다시 한번 감사드립니다.
쿼리 공부를 해서 적용해야겟네요 감사합니다...^^
질문이 이상한가요 선배님들?ㅜ.ㅜ