위의 이런 형태에서 아래형태로 바꾸려면 어떻게 해야할까요?
언어가 다표시되고 장치1, 장치2의 건수만 표시되도록하게 하고싶습니다.
도와주세요 ~
1. 우선 언어코드 테이블이 필요하며, (LAN 테이블) 2. 보고자하는 형식의 DATASET을 만듭니다. (A 테이블) 3. 이후 내역테이블(TAB)와 아우터 조인합니다.
-- 내역테이블에 있는 날짜만 나오는 기준 WITH TAB AS ( SELECT '2012-12-01' DT, '한국어' LAN, 1 CNT1, 0 CNT2 FROM DUAL UNION ALL SELECT '2012-12-02' DT, '영어' LAN, 0 CNT1, 1 CNT2 FROM DUAL UNION ALL SELECT '2012-12-02' DT, '중국어' LAN, 1 CNT1, 2 CNT2 FROM DUAL ), LAN AS ( SELECT '한국어' LAN FROM DUAL UNION ALL SELECT '영어' LAN FROM DUAL UNION ALL SELECT '일본어' LAN FROM DUAL UNION ALL SELECT '중국어' LAN FROM DUAL ) SELECT A.DT , A.LAN , NVL(B.CNT1, 0) , NVL(B.CNT2, 0) FROM (SELECT DT, LAN FROM LAN, (SELECT DISTINCT DT FROM TAB) ) A, TAB B WHERE A.DT = B.DT(+) AND A.LAN = B.LAN(+) ORDER BY A.DT
-- 내역테이블의 날짜범위가 다 나오는 기준 WITH TAB AS ( SELECT '2012-12-01' DT, '한국어' LAN, 1 CNT1, 0 CNT2 FROM DUAL UNION ALL SELECT '2012-12-02' DT, '영어' LAN, 0 CNT1, 1 CNT2 FROM DUAL UNION ALL SELECT '2012-12-02' DT, '중국어' LAN, 1 CNT1, 2 CNT2 FROM DUAL UNION ALL SELECT '2012-12-04' DT, '중국어' LAN, 1 CNT1, 2 CNT2 FROM DUAL ), LAN AS ( SELECT '한국어' LAN FROM DUAL UNION ALL SELECT '영어' LAN FROM DUAL UNION ALL SELECT '일본어' LAN FROM DUAL UNION ALL SELECT '중국어' LAN FROM DUAL ) SELECT A.DT , A.LAN , NVL(B.CNT1, 0) , NVL(B.CNT2, 0) FROM (SELECT DT, LAN FROM LAN, (SELECT TO_CHAR(TO_DATE( (SELECT MIN(DT) FROM TAB) ,'YYYY-MM-DD') + LEVEL -1, 'YYYY-MM-DD') DT FROM DUAL CONNECT BY LEVEL <= (SELECT MAX(TO_DATE(DT,'YYYY-MM-DD')) - MIN(TO_DATE(DT,'YYYY-MM-DD'))+1 FROM TAB) ) ) A, TAB B WHERE A.DT = B.DT(+) AND A.LAN = B.LAN(+) ORDER BY A.DT