sql문의 0 1 895

by 바라기짱조아 [2016.03.11 07:49:47]


 

 

해당월을 입력받아 일자에 맞는 대상 count를 세는 sql관련해서 가로로 출력하는 겁니다

예를들어 201602를 입력받앗다면 

a테이블에 20160203  1 

            20160203  2

        20160205  1

 이렇게 데이터가 존재한다면

 1   2   3   4   5  (201602월은 29일은  29일까지 있으니 가로행은  29까지 존재)

데이타부는 3일에 3건 5일에 1건  나머진 0으로 표시하는 내용입니다 .201603을 입력받았다면 헤더부는 31개이며 데이터부는 모두 0이겟ㅅ죠..어찌해야대나여?

by 마농 [2016.03.11 09:11:00]

SQL의 결과는 컬럼은 고정이고 행이 늘어나는 형태입니다.
컬럼을 가변으로 하려면 동적SQL을 사용해야 합니다.
아래는 컬럼 31개 고정으로 하는 정적SQL 입니다.
동적 컬럼을 원한다면? 아래 쿼리를 동적으로 만들어 내셔야 합니다.
 

SELECT MAX(DECODE(dd, '01', cnt, 0)) d01
     , MAX(DECODE(dd, '02', cnt, 0)) d02
     , MAX(DECODE(dd, '03', cnt, 0)) d03
     , MAX(DECODE(dd, '04', cnt, 0)) d04
     , MAX(DECODE(dd, '05', cnt, 0)) d05
     , MAX(DECODE(dd, '06', cnt, 0)) d06
     , MAX(DECODE(dd, '07', cnt, 0)) d07
     , MAX(DECODE(dd, '08', cnt, 0)) d08
     , MAX(DECODE(dd, '09', cnt, 0)) d09
     , MAX(DECODE(dd, '10', cnt, 0)) d10
     , MAX(DECODE(dd, '11', cnt, 0)) d11
     , MAX(DECODE(dd, '12', cnt, 0)) d12
     , MAX(DECODE(dd, '13', cnt, 0)) d13
     , MAX(DECODE(dd, '14', cnt, 0)) d14
     , MAX(DECODE(dd, '15', cnt, 0)) d15
     , MAX(DECODE(dd, '16', cnt, 0)) d16
     , MAX(DECODE(dd, '17', cnt, 0)) d17
     , MAX(DECODE(dd, '18', cnt, 0)) d18
     , MAX(DECODE(dd, '19', cnt, 0)) d19
     , MAX(DECODE(dd, '20', cnt, 0)) d20
     , MAX(DECODE(dd, '21', cnt, 0)) d21
     , MAX(DECODE(dd, '22', cnt, 0)) d22
     , MAX(DECODE(dd, '23', cnt, 0)) d23
     , MAX(DECODE(dd, '24', cnt, 0)) d24
     , MAX(DECODE(dd, '25', cnt, 0)) d25
     , MAX(DECODE(dd, '26', cnt, 0)) d26
     , MAX(DECODE(dd, '27', cnt, 0)) d27
     , MAX(DECODE(dd, '28', cnt, 0)) d28
     , MAX(DECODE(dd, '29', cnt, 0)) d29    -- 동적으로 구성
     , MAX(DECODE(dd, '30', cnt, 0)) d30    -- 동적으로 구성
     , MAX(DECODE(dd, '31', cnt, 0)) d31    -- 동적으로 구성
  FROM (SELECT SUBSTR(dt, 7, 2) dd
             , SUM(cnt) cnt
          FROM t
         WHERE dt LIKE '201602'||'%'
         GROUP BY SUBSTR(dt, 7, 2)
        )
;

 

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