행을 열로 만드는 쿼리 문의 0 3 3,080

by 마늘장 [SQL Developer] decode [2013.04.24 17:12:58]



오늘 날짜를 받으면 오늘 이전 일주일치에 대한 자료를
구해서 행으로 나열된 데이타를 열로 만들려고 하는데 잘 안되네요

즉, 날짜, A 항목, B항목으로 나오는 다음의 형태를
==========
날짜   A    B
==========
04/24 HD 300
04/23 HD 200
04/22 HD 250
....

아래와 같이 만들려고 합니다.

   4/24   4/23 4/22  <-- 최근일자순으로 
HD    300    200 250

보통 1년 같은 경우는 월이 Static 하므로 Group by 와 Decode 형태로 처리하는데
날짜는 유동적이라 좀 애매합니다.
DB 시스템은 Oracle 11g 입니다.
감사합니다.
by 채용근 [2013.04.24 17:34:26]

다이나믹 쿼리로 작성하셔야겠네요 ^^

by 디케이 [2013.04.24 17:35:29]
 
WITH 
t(dt, a, b) AS( 
 SELECT SYSDATE-LEVEL+1, 'HD', LEVEL*100 FROM dual CONNECT BY LEVEL <= 10 
)
SELECT LISTAGG(b, ' ') WITHIN GROUP(ORDER BY dt DESC) --항목B를 구분자 공백(' ')으로 묶음, 순서는 최근일자 순을위해 descending 을 준다.
 FROM t WHERE dt >= SYSDATE - 7 + 1          --현재일로부터 7일전데이터 조회
 GROUP BY A                      --항목A로 Grouping
;

by 채용근 [2013.04.24 17:46:45]
일주일이라고 명시가 되어있었군요

MAX ( decode ( DT, TO_CHAR ( sysdate - 7, 'yyyymmdd' ), b ) )
MAX ( decode ( DT, TO_CHAR ( sysdate - 6, 'yyyymmdd' ), b ) )
MAX ( decode ( DT, TO_CHAR ( sysdate - 5, 'yyyymmdd' ), b ) )
MAX ( decode ( DT, TO_CHAR ( sysdate - 4, 'yyyymmdd' ), b ) )
MAX ( decode ( DT, TO_CHAR ( sysdate - 3, 'yyyymmdd' ), b ) )
MAX ( decode ( DT, TO_CHAR ( sysdate - 2, 'yyyymmdd' ), b ) )
...

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