UNION ALL 이 이해가 잘 가질 않습니다..... 0 3 834

by GRIZZ [Oracle 기초] [2017.06.12 09:39:22]


cap1.PNG (9,950Bytes)
CAP2.PNG (8,758Bytes)

 /* benit.jd21.model.EbizCalcProc.select.detail : 조회 */
SELECT MAKE_YYMM ,
       MAKE_DT as makeDt ,
       SHOP_ID as shopId ,
       shopNm as shopNm ,
       PRDT_CD as prdtCd ,
       COLOR_CD as colorCd ,
       SIZE_CD as sizeCd ,
       SUM(SCM_QTY) as scmQty ,
       SUM(SCM_AMT) as scmAmt ,
       SUM(ERP_QTY) as erpQty ,
       SUM(ERP_AMT) as erpAmt ,
       SUM(SCM_QTY)-SUM(ERP_QTY) as calcQty ,
       SUM(SCM_AMT)-SUM(ERP_AMT) as calcAmt ,
       CLOSE_YN as closeYn ,
       REG_NO ,
       procMonth ,
       procDay
  FROM (

            SELECT SUBSTR(MAKE_DT, 1, 6) MAKE_YYMM ,
                   MAKE_DT ,
                   SHOP_ID ,
                   (SELECT SHOP_NM
                      FROM T_SHOP
                     WHERE SHOP_ID = A.SHOP_ID) as shopNm ,
                   PRDT_CD ,
                   COLOR_CD ,
                   SIZE_CD ,
                   SUM(QTY) SCM_QTY ,
                   SUM(SALE_PRC) SCM_AMT ,
                   0 ERP_QTY ,
                   0 ERP_AMT ,
                   CLOSE_YN ,
                   REG_NO ,
                   SUBSTR(TO_CHAR(A.WORK_DT, 'YYYYMMDD'), 0, 6) AS procMonth ,
                   SUBSTR(TO_CHAR(A.WORK_DT, 'YYYYMMDD'), 7, 2) AS procDay
              FROM T_EBIZ_SCM_UPLOAD A
             WHERE substr(MAKE_DT, 1, 6) BETWEEN '201705' /**P*/ AND '201706' /**P*/
                     AND MAKE_DT  = '20170508'
                      AND SHOP_ID  = 'S51001'
                      AND PRDT_CD  = 'SWWBLF61090'
                      AND COLOR_CD = 'IV'
                      AND SIZE_CD  = '66' 
             GROUP BY SHOP_ID ,
                   MAKE_DT ,
                   PRDT_CD ,
                   COLOR_CD ,
                   SIZE_CD ,
                   SUBSTR(MAKE_DT, 1, 6) ,
                   CLOSE_YN ,
                   REG_NO ,
                   SUBSTR(TO_CHAR(A.WORK_DT, 'YYYYMMDD'), 0, 6) ,
                   SUBSTR(TO_CHAR(A.WORK_DT, 'YYYYMMDD'), 7, 2)
                                      
             UNION ALL

            SELECT SUBSTR(MAKE_DT, 1, 6) MAKE_YYMM ,
                   MAKE_DT ,
                   SHOP_ID ,
                   (SELECT SHOP_NM
                      FROM T_SHOP
                     WHERE SHOP_ID = B.SHOP_ID) as shopNm ,
                   PRDT_CD ,
                   COLOR_CD ,
                   SIZE_CD ,
                   0 SCM_QTY ,
                   0 SCM_AMT ,
                   SUM(DECODE(RET_YN, 'Y', -1*QTY, QTY)) ERP_QTY ,
                   SUM(DECODE(RET_YN, 'Y', -1*REAL_SALE_AMT, REAL_SALE_AMT)) ERP_AMT ,
                   '' CLOSE_YN ,
                   '' REG_NO ,
                   '' procMonth ,
                   '' procDay
              FROM T_SHOP_RNDS_BASE_EBIZ_TEST B
             WHERE substr(MAKE_DT, 1, 6) BETWEEN '201705' /**P*/ AND '201706' /**P*/
               AND MAKE_DT  = '20170508'
               AND SHOP_ID  = 'S51001'
               AND PRDT_CD  = 'SWWBLF61090'
               AND COLOR_CD = 'IV'
               AND SIZE_CD  = '66' 
               AND DEL_DAY IS NULL
               AND STOCK_STAT = 'C20922'
               AND SUBSTR(SHOP_ID, 1, 2) = 'S5'
             GROUP BY SUBSTR(MAKE_DT, 1, 6) ,
                   MAKE_DT ,
                   SHOP_ID ,
                   PRDT_CD ,
                   COLOR_CD ,
                   SIZE_CD 
)
 WHERE 1=1
 GROUP BY MAKE_YYMM ,
       MAKE_DT ,
       SHOP_ID,
       shopNm ,
       PRDT_CD ,
       COLOR_CD ,
       SIZE_CD ,
       CLOSE_YN ,
       REG_NO ,
       procMonth ,
       procDay
 ORDER BY CLOSE_YN,
       SHOP_ID                    

 

위와 같은 쿼리를 이용하면

cap1(첨부파일)과 같은 결과가 나옵니다. 

 

제가 원하는 결과값은 

CAP2 (첨부파일 엑셀 캡쳐)와 같은 건데 

원하는 값이 나오질 않습니다.

 

-------------------------------------------------

0 SCMQTY

0 SCMAMT 

에서 0으로 넣는것은 데이터가 있는것이라서 UNION ALL이 적용되지 않는것인지?

 

SUM(SCM_QTY)-SUM(ERP_QTY) as calcQty

, SUM(SCM_AMT)-SUM(ERP_AMT) as calcAmt 

아니면 위 부분때문에 값이 두개가 나오는 것인지 .. 

이해가 가질 않아서 질문 올립니다. 

 

감사합니다!

by 마농 [2017.06.12 10:31:04]

Group By 기준항목에 대한 나열이 잘못 되어 있네요.
맨 뒤 4개 항목은 기준이 아닙니다.
맨 뒤 4개 항목을
 - 그룹바이에서 빼고
 - Select 절에서는 MIN() 처리를 해주세요.
 


by GRIZZ [2017.06.12 10:45:13]

일단 답변 감사합니다. 언제 댓글이 달리나 ....계속 새로고침 하고 있었네요 .

댓글 달아 주신대로 했는데 위에 결과값에 윗줄에 해당하는 내용만 나옵니다. 

두 줄이 더해져서 나오는 값이 필요한데...
한줄만 나오는게 ...해결이 안되네요 ㅠ


by GRIZZ [2017.06.12 10:48:38]

아! 아니네요 됐어요! 
제가 잘못했었네요~~~

감사합니다!!!!!!!!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입