by 무야호오오오 [Oracle 기초] oracle query db groupby [2021.07.02 15:40:17]
테이블 A
필드: P_ID, DATE, STATE, .... 기타 등등 엄청 많음
테이블 B(테이블 A를 P_ID, DATE, STATE로 group by 한 결과)
필드: P_ID, DATE, STATE, CNT
P_ID | DATE | STATE | CNT |
aaa | 0601 | A | 2 |
aaa | 0601 | B | 3 |
aaa | 0701 | A | 6 |
aaa | 0701 | B | 1 |
테이블 B를 아래와 같이 P_ID, DATE가 같으면 한줄로 합쳐서 STATE 별로 필드로 만들어 CNT 값을 보여주고 싶습니다.
(어차피 STATE는 A랑 B 밖에 없습니다.)
P_ID | DATE | STATE_A | STATE_B |
aaa | 0601 | 2 | 3 |
aaa | 0701 | 6 | 1 |
테이블 B를 자바에서 for문 돌리면 원하는 결과를 얻을 수 있으나 쿼리로 한방에 해결 가능할까 싶어서요..
그리고 JDK 1.5 사용 중이라.... stream() 도 못써서 ..ㅠ
쿼리 고수님 도와주세요!~~~
WITH t AS ( SELECT 'aaa' p_id, '0601' dt, 'A' state FROM dual UNION ALL SELECT 'aaa', '0601', 'A' FROM dual UNION ALL SELECT 'aaa', '0601', 'B' FROM dual UNION ALL SELECT 'aaa', '0601', 'B' FROM dual UNION ALL SELECT 'aaa', '0601', 'B' FROM dual UNION ALL SELECT 'aaa', '0701', 'A' FROM dual UNION ALL SELECT 'aaa', '0701', 'A' FROM dual UNION ALL SELECT 'aaa', '0701', 'A' FROM dual UNION ALL SELECT 'aaa', '0701', 'A' FROM dual UNION ALL SELECT 'aaa', '0701', 'A' FROM dual UNION ALL SELECT 'aaa', '0701', 'A' FROM dual UNION ALL SELECT 'aaa', '0701', 'B' FROM dual ) SELECT p_id , dt , COUNT(DECODE(state, 'A', 1)) cnt_a , COUNT(DECODE(state, 'B', 1)) cnt_b FROM t GROUP BY p_id, dt ORDER BY p_id, dt ;