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() 도 못써서 ..ㅠ
쿼리 고수님 도와주세요!~~~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 ; |