sql 조회 문의드립니다.(손익 조회하는..) 0 3 615

by lgxj [2021.12.31 11:29:49]



우선 원하는건

년도 || 분기별 손익을 구하려고 하는데요

WITH M_DATA
 AS
 (
    SELECT '2017_1' YYYYMM
           ,'C' AS GBN
           ,2486532576 AS AMT1
           ,149477800 AS AMT2
           ,0 AS AMT3
           ,0 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6
     FROM DUAL
     UNION ALL
    SELECT '2018_1' YYYYMM
           ,'C' AS GBN
           ,5330058700 AS AMT1
           ,1014711124 AS AMT2
           ,97757700 AS AMT3
           ,0 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6           
     FROM DUAL     
     UNION ALL
    SELECT '2019_1' YYYYMM
           ,'C' AS GBN
           ,9144568951 AS AMT1
           ,1644554334 AS AMT2
           ,614302836 AS AMT3
           ,58738100 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6           
     FROM DUAL         
     UNION ALL
    SELECT '2020_1' YYYYMM
           ,'C' AS GBN
           ,25498676327 AS AMT1
           ,2529122730 AS AMT2
           ,668306945 AS AMT3
           ,347803129 AS AMT4
           ,36385000 AS AMT5
           ,0 AS AMT6           
     FROM DUAL    
     UNION ALL
    SELECT '2017_2' YYYYMM
           ,'C' AS GBN
           ,2110904485 AS AMT1
           ,408033266 AS AMT2
           ,0 AS AMT3
           ,0 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6           
     FROM DUAL     
     UNION ALL
    SELECT '2018_2' YYYYMM
           ,'C' AS GBN
           ,4101934000 AS AMT1
           ,1011141428 AS AMT2
           ,265803641 AS AMT3
           ,0 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6           
     FROM DUAL     
    UNION ALL     
    SELECT '2017_1' YYYYMM
           ,'G' AS GBN
           ,2110904485 AS AMT1
           ,408033266 AS AMT2
           ,0 AS AMT3
           ,0 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6           
     FROM DUAL     
     UNION ALL
    SELECT '2018_1' YYYYMM
           ,'G' AS GBN
           ,4101934000 AS AMT1
           ,1011141428 AS AMT2
           ,265803641 AS AMT3
           ,0 AS AMT4
           ,0 AS AMT5
           ,0 AS AMT6           
     FROM DUAL    
 )
 SELECT *
 FROM M_DATA

이 데이타를 가지고 첨부하는 화면 처럼 구성을 해서 계산을 하려고 합니다.

피벗을 사용해야 될거 같은데..어느방식으로 해야 원하는 데이타를 나오게 핡수 있을까요?

by 마농 [2021.12.31 12:45:59]

데이터가 뭔가 이상합니다.
원본 대비 결과표도 이상하구요.
왜 이렇게 해야 하는지 모르겠네요.
원본이나 결과가 맞게 표현된 건지 의문이구요.
데이터에 대한 설명을 해주세요.


by lgxj [2021.12.31 13:29:03]

전이율 이라고 해서

YYYYMM = 2017년 _1 1분기 에 AMT1과 2018년_1 분기 AMT2 의 금액을 계산하기 위해서 저런식으로 표현을 먼저 하려고합니다.


by 마농 [2021.12.31 13:29:33]

왜 이래야만 하는지 이해는 안가지만
억지스럽게 한번 만들어 봤습니다.

WITH m_data AS
(
SELECT '2017_1' yyyymm, 'C' gbn, 2486532576 amt1, 149477800 amt2, 0 amt3, 0 amt4, 0 amt5, 0 amt6 FROM dual
UNION ALL SELECT '2018_1', 'C',  5330058700, 1014711124,  97757700,         0,        0, 0 FROM dual
UNION ALL SELECT '2019_1', 'C',  9144568951, 1644554334, 614302836,  58738100,        0, 0 FROM dual
UNION ALL SELECT '2020_1', 'C', 25498676327, 2529122730, 668306945, 347803129, 36385000, 0 FROM dual
UNION ALL SELECT '2017_2', 'C',  2110904485,  408033266,         0,         0,        0, 0 FROM dual
UNION ALL SELECT '2018_2', 'C',  4101934000, 1011141428, 265803641,         0,        0, 0 FROM dual
UNION ALL SELECT '2017_1', 'G',  2110904485,  408033266,         0,         0,        0, 0 FROM dual
UNION ALL SELECT '2018_1', 'G',  4101934000, 1011141428, 265803641,         0,        0, 0 FROM dual
)
SELECT gbn
     , NVL(MIN(DECODE(yyyymm, '2017_1', amt1)), 0) amt1
     , NVL(MIN(DECODE(yyyymm, '2018_1', amt2)), 0) amt2
     , NVL(MIN(DECODE(yyyymm, '2019_1', amt3)), 0) amt3
     , NVL(MIN(DECODE(yyyymm, '2020_1', amt4)), 0) amt4
     , NVL(MIN(DECODE(yyyymm, '2021_1', amt5)), 0) amt5
     , NVL(MIN(DECODE(yyyymm, '2022_1', amt6)), 0) amt6
  FROM m_data
 WHERE yyyymm IN ('2017_1', '2018_1', '2019_1', '2020_1', '2021_1', '2022_1')
 GROUP BY gbn
 ORDER BY gbn
;

 

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