메인쿼리에 있는 컬럼 값에서 서브쿼리에 있는 컬럼 값을 뺄려고 합니다. 0 2 2,410

by 동안이 [2012.03.22 20:19:43]


메인쿼리 현재 고객이 구매하러 온 상품 금액(메인쿼리)에서. 전에 미리 적립한 예약된 영수증 금액(서브쿼리)를 뺄려고 합니다.


아래의 쿼리는 서브 쿼리로 둘 쿼리 내용 입니다.

SELECT SHOP.SHOP_CURR ||' '|| LTRIM(get_money_format(SUM(ADV.STORED_CREDIT_AMT + ADV.USED_AMT),2,1)) as  LBL_ADVANCESALEBALANCE 
FROM GWP_SHOP_INFO  SHOP, GWP_ADVSALE_INFO ADV    
WHERE SHOP.TO_SHOP_CODE = ADV.TO_SHOP_CODE    
AND ADV.TO_SHOP_CODE = '300'    
AND ADV.SALE_DATE=TO_DATE('20120322','YYYYMMDD') AND ADV.SALE_SEQ= '3'    
GROUP by SHOP.SHOP_CURR 


-----------------------------------------------
LBL_ADVANCESALEBALANCE
----------------------------------------------- 
$ 500.00 이 나옵니다. 
-----------------------------------------------

get_money_format : 소수점 프로시저
ADV.STORED_CREDIT_AMT : 사용금액
 ADV.USED_AMT : 지불금액
SHOP.SHOP_CURR  : 환종코드 ($) 나라별 화폐 단위
SHOP.TO_SHOP_CODE : 매장코드
AND ADV.SALE_DATE  : 날짜
 ADV.SALE_SEQ : 해당날짜의 영수증 순서 번호


서브쿼리의 중점은 상품을 미리 구매하기 위한 예약된 영수증 금액입니다. 


아래는  메인 쿼리로 둘 쿼리의 내용입니다.

SELECT SHOP.SHOP_CURR ||' '|| LTRIM(get_money_format(SUM(SI.TOTAL_SALE_AMT),2,1)) as  LBL_ADVANCESALESREDEEMED 
FROM GWP_SHOP_INFO  SHOP, GWP_SALE_INFO SI    
WHERE SHOP.TO_SHOP_CODE = SI.TO_SHOP_CODE    
AND SI.TO_SHOP_CODE = '300'    
AND SI.SALE_DATE=TO_DATE('20120322','YYYYMMDD') AND SI.SALE_SEQ= '3'    
GROUP by SHOP.SHOP_CURR


SI.TOTAL_SALE_AMT : GWP_SALE_INFO에 있는 현재 영수증 구매 토탈금액.


결과는
----------------------------------------------------
LBL_ADVANCESALESREDEEMED
----------------------------------------------------
$ 54.860.00
----------------------------------------------------

이렇게 나오는데.


이렇게 쿼리를 나누는 이유는 조회하는 날짜와 영수증 번호가 틀리기 때문입니다.


메인쿼리 $ 54.860.00 - 서브쿼리 $ 500.00 를 할려고 하는데.  별칭은 아무거나 해주셔도 상관 없습니다.

쿼리를 어떡해 짜야 될지. 고수님들 부탁 좀 드리겠습니다. ^^
by 마농 [2012.03.23 08:32:30]
SELECT a.shop_curr
     , a.lbl_advancesalesredeemed - b.lbl_advancesalebalance AS v
  FROM (SELECT shop.shop_curr
             , SUM(si.total_sale_amt) AS lbl_advancesalesredeemed
          FROM gwp_shop_info shop
             , gwp_sale_info si
         WHERE shop.to_shop_code = si.to_shop_code
           AND si.to_shop_code = '300'
           AND si.sale_date = TO_DATE('20120322', 'yyyymmdd')
           AND si.sale_seq = '3'
         GROUP BY shop.shop_curr
        ) a
       (SELECT shop.shop_curr
             , SUM(adv.stored_credit_amt + adv.used_amt) AS lbl_advancesalebalance
          FROM gwp_shop_info  shop
             , gwp_advsale_info adv
         WHERE shop.to_shop_code = adv.to_shop_code
           AND adv.to_shop_code = '300'
           AND adv.sale_date = TO_DATE('20120322', 'yyyymmdd')
           AND adv.sale_seq = '3'
         GROUP BY shop.shop_curr
        ) b
 WHERE a.shop_curr = b.shop_curr
;

by 동안이 [2012.03.23 09:11:28]

마농님 정말 감사합니다. ㅠㅠ 많은 도움이 됬습니다!!   오늘은 즐거운 불금이네요. 좋은 하루 되세요. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입