안녕하세요.
쿼리 짜던 중 다른 방법이 있지않을까 하고 질문올립니다.
조언 부탁드리겠습니다.
테이블명 : TABLE_A
컬럼 : A, TYPE, CATEG
원하는 데이터.
TABLE_A의 전체건수 | TYPE이 A인 건수 | TYPE이 B인 건수 |
CATEG가 1인 전체건수 | TYPE이 A면서 CATEG가 1인건수 | TYPE이 B면서 CATEG가 1인건수 |
CATEG가 2인 전체건수 | TYPE이 A면서 CATEG가 2인건수 | TYPE이 B면서 CATEG가 2인건수 |
이렇게 나오게 하고싶은데...
지금
SELECT
(SELECT count(*)
FROM TABLE_A) 전체건수,
(SELECT count(*)
FROM TABLE_A
WHERE TYPE='A') TYPE_A건수
FROM DUAL
UNION ALL
SELECT
(SELECT count(*)
FROM TABLE_A
WHERE CATEG=1) 전체건수_CATEG1,
(SELECT count(*)
FROM TABLE_A
WHERE TYPE='A'
AND CATEG=1) TYPE_A건수_CATEG1
FROM DUAL
이런식으로 밖에 못하겠어요..
시간이 너무 오래걸리는데..
혹시 다른 방법이 있을까요???
도움 요청 드립니다..
SELECT AA,BB,CC FROM ( SELECT SUM(1) A --전체건수 , SUM(DECDOE(TYPE, 'A', 1, 0)) B --TYPE_A건수 , SUM(DECDOE(TYPE, 'B', 1, 0)) C --TYPE_B건수 , SUM(DECDOE(CATEG, 1, 1, 0)) D --CATEG가 1인 전체건수 , SUM(CASE WHEN TYPE='A' AND CATEG=1 THEN 1 ELSE 0 END) E --TYPE이 A면서 CATEG가 1인건수 , SUM(CASE WHEN TYPE='B' AND CATEG=1 THEN 1 ELSE 0 END) F --TYPE이 B면서 CATEG가 1인건수 , SUM(DECDOE(CATEG, 2, 1, 0)) G --CATEG가 2인 전체건수 , SUM(CASE WHEN TYPE='A' AND CATEG=2 THEN 1 ELSE 0 END) H --TYPE이 A면서 CATEG가 2인건수 , SUM(CASE WHEN TYPE='B' AND CATEG=2 THEN 1 ELSE 0 END) I --TYPE이 B면서 CATEG가 2인건수 FROM TABLE_A ) UNPIVOT ( (AA, BB, CC) FOR gb IN( (A,B,C), (D,E,F), (G,H,I) )) ;