2013-08-08 3 views
0

테이블이 3 개 있습니다.오라클 : 커서 절차 : 합계 2 테이블 합계

|Obj_id|Obj_Name| 
---------------- 
|A  |  AAA| 
|B  |  BBB| 
|C  |  CCC| 

표 2

|Obj_id|Amount1| 
---------------- 
|A  | 1000| 
|C  |  20| 
|A  | 100| 
|B  |  50| 
|C  |  10| 

표 3

|Obj_id|Amount2| 
---------------- 
|B  | 500| 
|C  |  10| 
|C  |  40| 

지금은 아래

같은 커서를 반환하는 절차 "보고서"를 작성해야

보고서

|Obj_Name|Amount1|Amount2|Obj_id| 
--------------------------------- 
|AAA  | 1100|  0|A  | 
|BBB  |  50| 500|B  | 
|CCC  |  30|  50|C  | 

내가 봤지만 어디에도 일치하는 대답이 없습니다.

+0

어디'그것으로 적합 sum' 않는다 - 당신이'표 2/3'에서 obj_id''당 여러 개의 값을해야합니까? 기본적인 쿼리가 작동하고 프로 시저에서 반환하는 방법을 알아 내야합니까? (만약 당신이 실제로 * 돌아 오는 * 함수라면, 함수를 의미하는지, 아니면 out 매개 변수를 가진 프로 시저인지는 확실하지 않습니다.) –

+0

합계 예제에서는 제 실수입니다. 내 사건과 관련된 질문을 수정했습니다. 함수 또는 프로 시저가 문제를 해결하면 정상입니다. – user2663001

답변

1

Obj_Name Amount1 Amount2 Obj_id 
AAA  1000  0  A 
BBB  0  500  B 
CCC  20  10  C 

편집이

SELECT 
    T1.Obj_Name 
    ,NVL(T2.Amount1,0) AS Amount1 
    ,NVL(T3.Amount2,0) AS Amount2 
    ,NVL(T1.Obj_id ,0) AS Obj_id 
FROM Table1 T1 
LEFT JOIN Table2 T2 ON T1.Obj_id = T2.Obj_id 
LEFT JOIN Table3 T3 ON T1.Obj_id = T3.Obj_id 
ORDER BY T1.Obj_Name 

SQL FIDDLE DEMO

OUTPUT을 시도

SELECT 
    T1.Obj_Name AS Obj_Name 
    ,NVL(T2.Amount1,0) AS Amount1 
    ,NVL(T3.Amount2,0) AS Amount2 
    ,T1.Obj_id AS Obj_id 
FROM Table1 T1 
LEFT JOIN (SELECT Obj_id,SUM(Amount1) AS Amount1 FROM Table2 GROUP BY Obj_id) T2 ON T1.Obj_id = T2.Obj_id 
LEFT JOIN (SELECT Obj_id,SUM(Amount2) AS Amount2 FROM Table3 GROUP BY Obj_id) T3 ON T1.Obj_id = T3.Obj_id 
ORDER BY T1.Obj_Name; 

SQL FIDDLE DEMO UPDATED

OUTPUT

OBJ_NAME AMOUNT1 AMOUNT2 OBJ_ID 
AAA  1100  0  A 
BBB  50   500 B 
CCC  30   50  C 
+0

답장을 보내 주셔서 감사합니다.하지만 제 경우와 일치하도록 질문을 수정했습니다. 네가 나에게 또 다른 해결책을 주길 바란다. – user2663001

+0

@ user2663001 업데이트 된 솔루션 확인 – bvr

+0

예, 그게 내가 필요한 것입니다. 이제는 "Open cursor for select ..."를 추가하여 절차를 완료하십시오. 너는 신 같아. 많은 감사합니다. – user2663001