[문의] decode 동적인 조회 0 1 1,885

by 한만정도경영 [Oracle 기초] sql [2019.02.15 23:30:09]


안녕하세요.

월별  집계데이터를  구현하려고 합니다.

 

조회 기간 이 

 WHERE date1 BETWEEN '20180101' AND '20180531'  이면   decode 필드가   month1~month5가

나오고

 WHERE date1 BETWEEN '20180101' AND '20180331'  이면   decode 필드가   month1|month2|month3

까지만  나오게 하고 싶습니다.

고수님들  부탁드립니다.

감사합니다.

 

WITH t AS
 (
SELECT '20180105' date1,'사과' itCd,'6' qty FROM  DUAL
UNION ALL
SELECT '20180205'date1,'사과' itCd,'3' qty FROM DUAL
UNION all
SELECT '20180305'date1,'사과' itCd,'4' qty FROM DUAL
UNION all
SELECT '20180405'date1,'사과' itCd,'6' qty FROM DUAL
UNION all
SELECT '20180505'date1,'사과' itCd,'7'  qty FROM DUAL
UNION all
SELECT '20180605'date1,'사과' itCd,'6' qty FROM DUAL
)


SELECT itCd,SUM(DECODE(SUBSTR(date1,5,2),01,qty)) month1
       ,SUM(DECODE(SUBSTR(date1,5,2),02,qty)) month2
          ,SUM(DECODE(SUBSTR(date1,5,2),03,qty)) month3
              ,SUM(DECODE(SUBSTR(date1,5,2),04,qty)) month4
               ,SUM(DECODE(SUBSTR(date1,5,2),05,qty)) month5
 FROM t
 WHERE date1 BETWEEN '20180101' AND '20180531'
 GROUP BY itCd

 

by 마농 [2019.02.18 08:18:20]

가변 컬럼 구조는 SQL 만으로는 안됩니다.
컬럼의 개수와 컬럼명이 정해져야만 합니다.
무조건 1월부터 시작한다고 가정한다면? 그냥 12개 컬럼 고정으로 가는걸 추천합니다.
가변 컬럼을 원한다면 프로그래밍을 통한 동적쿼리로 구성하셔야 합니다.

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