SELECT DECODE(no, 3, null, substr(to_char(m_date,'yyyymmdd'),0,6)) m_mon, DECODE(no, 1, to_char(m_date,'yyyymmdd'), 2, null ) m_date, DECODE(no, 1, to_char(content), 2, '합계', 3, '총계') content, sum(buy_price), sum(sell_price) FROM aa, (select rownum no from dual connect by level <= 3) GROUP BY DECODE(no,3,null,substr(to_char(m_date,'yyyymmdd'),0,6)), DECODE(no,1,to_char(m_date,'yyyymmdd'),2,null ), DECODE(no, 1, to_char(content), 2, '합계', 3, '총계') ORDER BY 1,2;
위에 나온 것이 작성한 쿼리고 아래에 나오는 사진이 쿼리 조회시 나온 화면입니다.
테이블은 AA 라는 테이블 하나구요,
컬럼은 m_date(날짜), content(내용), buy_price(구매가), sell_price(판매가)로 되어있습니다.
제가 원하는 것은, 저 조회된 화면에서 m_mon 열만 없었으면 좋겠습니다.
참, UNION ALL, GROUP BY ROLLUP은 사용하지 않아야합니다..
오로지 DECODE, GROUP BY, DUAL 테이블을 이용해서 해야합니다.
m_mon 뺴고도 나머지가 똑같이 조회되게 하려면 어떻게 바꿔야 할까요?
/* 그냥 지우면 될듯합니다만.. */ SELECT --DECODE(no, 3, null, substr(to_char(m_date,'yyyymmdd'),0,6)) m_mon, DECODE(no, 1, to_char(m_date,'yyyymmdd'), 2, null ) m_date, DECODE(no, 1, to_char(content), 2, '합계', 3, '총계') content, sum(buy_price), sum(sell_price) FROM aa, (select rownum no from dual connect by level <= 3) GROUP BY DECODE(no,3,null,substr(to_char(m_date,'yyyymmdd'),0,6)), DECODE(no,1,to_char(m_date,'yyyymmdd'),2,null ), DECODE(no, 1, to_char(content), 2, '합계', 3, '총계') ORDER BY 1,2;
GROUP BY 는 그대로 두고 SELECT 절에서만 빼면 되긴 하는데요.
정렬이 중요하죠. 지금 숫자 1,2 로 정렬했으니 이부분도 바뀌어야 합니다.
방법은 여러가지가 있는데
지금 쿼리 바꾸지 말고 그대로 인라인뷰로 감싸서 Select 절에서만 m_mon 빼도 되구요.
인라인뷰 안쓰고 그냥 빼려면?
ORDER BY 절에 빼기전 표현식 그대로를 써주시면 됩니다.
ORDER BY DECODE(no,3,null,substr(to_char(m_date,'yyyymmdd'),0,6))
, DECODE(no,1,to_char(m_date,'yyyymmdd'),2,null ),
그런데 SELECT절에서 두번째 표현식의 알리아스를 컬럼명인 m_date 와 동일하게 주었기 때문에 문제가 됩니다.
GROUP BY 에서의 m_date 는 컬럼인데
ORDER BY 에서의 m_date 는 알리아스(두번째 표현식)가 됩니다.
서로 다른 항목이죠.
컬럼으로 인지해야 합니다. 다음과 같이 해야 합니다.
ORDER BY DECODE(no,3,null,substr(to_char(aa.m_date,'yyyymmdd'),0,6))
, m_date
첫번째 표현식에서는 aa.m_date 처럼 aa 를 붙여줘서 테이블의 컬럼임을 명시하구요.
두번째 표현식에서도 첫번째 표현식처럼 aa 를 붙여줘도 되지만
두번째 표현식 자체를 아예 통째로 알리아스인 m_date 로 교체해도 동일하죠.
UNION ALL, ROLLUP 을 쓰지 말아야 하는데?
CONNECT BY 구문은 써도 되는지 의문이네요?
DECODE 구문도 조금 장황하게 작성된 듯 하고요.
SELECT DECODE(no, 1, TO_CHAR(m_date, 'yyyymmdd')) m_date , DECODE(no, 3, '총계', 2, '합계', content) content , SUM( buy_price) buy_price , SUM(sell_price) sell_price FROM aa , (SELECT ROWNUM no FROM dict WHERE ROWNUM <= 3) GROUP BY DECODE(no, 3, '', TO_CHAR(m_date, 'yyyymm')) , DECODE(no, 1, TO_CHAR(m_date, 'yyyymmdd')) , DECODE(no, 3, '총계', 2, '합계', content) ORDER BY DECODE(no, 3, '', TO_CHAR(aa.m_date, 'yyyymm')) , m_date ;