GROUP BY 질문드립니다. 0 2 1,452

by 겨울눈 [SQL Query] [2023.03.07 09:55:55]


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 가 너무 많네요

by 마농 [2023.03.07 10:15:02]
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
;

 


by 겨울눈 [2023.03.07 10:30:32]

감사합니다!

항상 도움 많이 받고 갑니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입