오전부터 고민중입니다..
SQL 질문을 위해서 편집할려다가 그냥 올려봅니다..
select
o.orderno, o.memberno, o.tradeno, o.itemcode, o.salewon, o.incode,
nvl(sum(o.itemcount),0) itemcnt, nvl(sum(o.cancelcnt),0) cancelcnt,
nvl(sum(o.bancnt),0) bancnt, nvl(sum(o.kyocnt),0) kyocnt,
nvl(sum(o.ordercnt),0) ordercnt,
nvl(sum(o.itemcount * o.salewon),0) as itemwon, nvl(sum(o.cancelcnt * o.salewon),0) as cancelwon,
nvl(sum(o.bancnt * o.salewon),0) as banwon, nvl(sum(o.kyocnt * o.salewon),0) as kyowon,
nvl(sum(o.ordercnt * o.salewon),0) as orderwon, t.baewon, nvl(sum(o.ordercnt * o.buywon),0) as buywon, t.memo
from t_orderitem o, t_tradem t
where o.tradeno = t.trademno
and o.maedate between to_char('20050201') and to_char('20050501')
and o.lgroup = 'NC'
group by o.orderno, o.memberno, o.tradeno, o.itemcode, o.salewon, o.incode, t.baewon, t.memo
union all
select ' ' as orderno, t.memberno, t.trademno as tradeno, d.itemcode, -d.chuldwon, t.incode,
-nvl(sum(d.chulcnt),0) as itemcnt, 0 as cancelcnt, 0 as bancnt, 0 as kyocnt, -nvl(sum(d.chulcnt),0) as ordercnt,
nvl(sum(d.chulwon),0) as itemwon, 0 as cancelwon, 0 as banwon, 0 as kyowon,
nvl(sum(d.chulwon),0) as orderon, 0 as baewon, -nvl(sum(d.chulcnt * o.buywon),0) as buywon, t.memo
from t_tradem t, t_traded d, t_orderitem o
where t.trademno = d.trademno
and d.orderno = o.orderno
and d.itemcode = o.itemcode
and t.condate between to_char('20050201') and to_char('20050501')
and t.gubunflag = '1001'
and o.lgroup = 'NC'
group by t.memberno, t.trademno, d.itemcode, d.chuldwon, t.incode, t.mem
제 질문의 요지는 현재 위의 쿼리에서 각각 값을 가져와서 UNION ALL 을 하는데
t_tradem , t_orderitem 테이블이 두번씩 읽힌게 너무 신경이 쓰입니다.
두번째 쿼리에서는 t_traded 도 같이 조인하게 때문에 어떻게 할수 없는건가요?
t_tradem , t_orderitem 를 한번만 읽고 값을 가져오고 싶은데.. 좀 도와주세요..
정확한 쿼리는 아니더라도 대충 힌트라도 주시면 열심히 해보겠습니다..^^;
첫댓글 단순히 쿼리만 보고 대답하기에는 힘든 문제군요. 경험이 풍부하신 분들은 하실 수 있을 수도... 언젠가 제가 쿼리의 수학적 모델을 찾아낸다면 쿼리만 보고도 변형할 수 있는 날이 올꺼라고 생각하고 있습니다. 간단한 몇개의 원리로 말이죠.
요는 몇개의 샘플데이타와 원하는 결과에 대한 정성적인(qualitative) 기술을 더 해주시면 더 쉽게 풀릴 문제 같습니다.