통계를 내려고 하는데.. 너무 어렵네요 ㅠㅠ
YEAR | TMP1 | TMP2 | GUBUN |
2015 | 5 | 0 | B |
2015 | 0 | 0 | S |
2016 | 1 | 46.0 | B |
2016 | 1 | 7.7 | S |
2016 | 1 | 12.3 | S |
2016 | 1 | 8.2 | B |
2017 | 0 | 0 | S |
2017 | 1 | 21.7 | B |
2020 | 2 | 0 | B |
2020 | 1 | 7.4 | S |
2020 | 0 | 0 | S |
2020 | 1 | 8.6 | B |
이런식으로 데이터가 들어 있을때
년도 | S | B | TOTAL | |||
TMP1 | TMP2 | TMP1 | TMP2 | TMP1 | TMP2 | |
2015 | 0 | 0 | 5 | 0 | 5 | 0 |
2016 | 1 | 12.3 | 1 | 46.0 | 2 | 58.3 |
2016 | 1 | 7.7 | 1 | 8.2 | 2 | 15.9 |
2017 | 0 | 0 | 1 | 21.7 | 1 | 21.7 |
2020 | 0 | 0 | 1 | 7.4 | 1 | 7.4 |
2020 | 0 | 0 | 1 | 8.6 | 1 | 8.6 |
TOTAL | 2 | 20.0 | 10 | 91.9 | 12 | 636.6 |
이렇게 출력하고 싶은데 짧은 지식으론 이렇게 출력이 안됩니다.. ㅠㅠ
S | B | TOTAL | ||||
year | tmp1 | tmp2 | tmp1 | tmp2 | tmp1 | tmp2 |
... | ||||||
2015 | 0 | 0 | 0 | 0 | 0 | 0 |
2015 | 0 | 0 | 5 | 0 | 5 | 0 |
2016 | 1 | 12.3 | 0 | 0 | 1 | 12.3 |
2016 | 1 | 7.7 | 0 | 0 | 1 | 7,7 |
2016 | 0 | 0 | 1 | 46.0 | 1 | 46 |
2016 | 0 | 0 | 1 | 8.2 | 1 | 8.2 |
... |
계속 이렇게만 출력이 되네요..
제가 원하는건 아래처럼 연도별 값이 0이면 행을 합쳐서 보여주고 싶은데 잘안됩니다..
2016 | 1 | 12.3 | 1 | 46.0 | 2 | 58.3 |
2016 | 1 | 7.7 | 1 | 8.2 | 2 | 15.9 |
도움부탁드립니다!
WITH t AS ( SELECT '2015' year, 5 tmp1, 0 tmp2, 'B' gubun FROM dual UNION ALL SELECT '2015', 0, 0.0, 'S' FROM dual UNION ALL SELECT '2016', 1, 46.0, 'B' FROM dual UNION ALL SELECT '2016', 1, 7.7, 'S' FROM dual UNION ALL SELECT '2016', 1, 12.3, 'S' FROM dual UNION ALL SELECT '2016', 1, 8.2, 'B' FROM dual UNION ALL SELECT '2017', 0, 0.0, 'S' FROM dual UNION ALL SELECT '2017', 1, 21.7, 'B' FROM dual UNION ALL SELECT '2020', 2, 0.0, 'B' FROM dual UNION ALL SELECT '2020', 1, 7.4, 'S' FROM dual UNION ALL SELECT '2020', 0, 0.0, 'S' FROM dual UNION ALL SELECT '2020', 1, 8.6, 'B' FROM dual ) SELECT NVL(year, 'TOTAL') year , SUM(DECODE(gubun, 'S', tmp1)) tmp1_s , SUM(DECODE(gubun, 'S', tmp2)) tmp2_s , SUM(DECODE(gubun, 'B', tmp1)) tmp1_b , SUM(DECODE(gubun, 'B', tmp2)) tmp2_b , SUM(tmp1) tmp1 , SUM(tmp2) tmp2 FROM (SELECT year, tmp1, tmp2, gubun , ROW_NUMBER() OVER(PARTITION BY year, gubun ORDER BY 0) rn FROM t ) GROUP BY ROLLUP((year, rn)) ;