group by 후 다시 결과를 가공하려고 하는데 0 4 2,987

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() 도 못써서 ..ㅠ

 

쿼리 고수님 도와주세요!~~~

by 마농 [2021.07.02 16:20:52]
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
;

 


by 무야호오오오 [2021.07.02 16:31:31]

date가 예시에 있는 저 2날만 있는게 아니고 끝없이 많아질텐데 그러면 안되지 않나요?


by 마농 [2021.07.02 16:49:51]
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
;

 


by 무야호오오오 [2021.07.05 09:50:09]

감사합니다~~ ㅎㅎ

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