안녕하세요, 초보개발자입니다.
쿼리 관련해서 질문이 있는데요, 사진처럼 데이터를 뽑았습니다.
쿼리는 대략적으로 아래와 같습니다.
SELECT DECODE( GROUPING_ID( test, TIMESTAMP ) , 1, test || '', 3, '총합계', test ) AS test , DECODE( GROUPING_ID( test, TIMESTAMP ) , 1, '소계', 3, '', TIMESTAMP ) AS TIMESTAMP , .... ) GROUP BY rollup(test,TIMESTAMP)
이때 GROUP BY 밑에 Having을 이용해서 TIMESTAMP 값이 1개일 때는 소계가 안나오게 할 수 없을까요?
2번째 image와 같이 TIMESTAMP 값이 2개일때는 소계를 뽑아내지만, 첫번째 사진과 같이 'TIMESTASMP 값이 1개' 일 때는
소계를 보여주고 싶지 않습니다 ㅠ
어떤 방법이 있을까요.. HAVING절에서 처리하는 방법이요...!!ㅠ
감사합니다..!
아!. 그러네요.
제가 잘못 생각했네요.
COUNT(*) 대신 COUNT(DISTINCT timestamp) 로 바꾸시면 됩니다.
WITH t AS ( SELECT 'AAA' test, '2018-11-14' timestamp FROM dual UNION ALL SELECT 'AAA', '2018-11-14' FROM dual UNION ALL SELECT 'BBB', '2018-11-14' FROM dual UNION ALL SELECT 'BBB', '2018-11-14' FROM dual UNION ALL SELECT 'CCC', '2018-11-14' FROM dual UNION ALL SELECT 'CCC', '2018-11-14' FROM dual UNION ALL SELECT 'CCC', '2018-11-15' FROM dual ) SELECT NVL(test, '총합계') test , DECODE(GROUPING_ID(test, timestamp), 0, timestamp, 1, '소계') timestamp , COUNT(*) cnt FROM t a GROUP BY ROLLUP(test, timestamp) HAVING NOT (COUNT(DISTINCT timestamp) = 1 AND GROUPING_ID(test, timestamp) = 1) ORDER BY a.test, a.timestamp ;