WITH T AS ( SELECT 'Y' AS COL_1 ,'Y' AS COL_2 ,'N' AS COL_3 ,1000 AS VALUE FROM DUAL UNION ALL SELECT 'Y' AS COL_1 ,'N' AS COL_2 ,'N' AS COL_3 ,2000 AS VALUE FROM DUAL UNION ALL SELECT 'N' AS COL_1 ,'N' AS COL_2 ,'Y' AS COL_3 ,3000 AS VALUE FROM DUAL ) SELECT SUM(VALUE),COL_1,COL_2,COL_3 FROM T GROUP BY COL_1,COL_2,COL_3
이런 쿼리가 있을 경우
값이 아래 처럼 나오게 되는데
3000 N N Y
2000 Y N N
1000 Y Y N
각 컬럼이 'Y'일 경우 각자의 합계가 아니라 전체의 합계가 나올 수 있도록 쿼리를 작성하고 싶습니다
예를 들어
COLUMN_NAME SUM(VALUE)
COL_1 3000
COL_2 1000
COL_3 3000
이런식으로 출력 하고 싶습니다.
GROUP BY를 전부 따로해서 UNION 으로 합치려 했는데 COL_X 가 너무 많네요
WITH t AS ( -- 컬럼 명칭으로 value 와 같은 시스템 예약어를 사용하는 것은 좋지 않습니다. SELECT 'Y' col_1, 'Y' col_2, 'N' col_3, 1000 val FROM dual UNION ALL SELECT 'Y', 'N', 'N', 2000 FROM dual UNION ALL SELECT 'N', 'N', 'Y', 3000 FROM dual ) SELECT gb , SUM(val) val FROM t UNPIVOT (yn FOR gb IN (col_1, col_2, col_3)) WHERE yn = 'Y' GROUP BY gb ORDER BY gb ;