postgresql에서 세로를 가로로 표현하고 하는데요.
데이터는 아래와 같습니다.
일자 | 구분 | 국가 | 가입건수 | 탈퇴건수 |
20181231 | 웹 | 일본 | 12 | 3 |
20181231 | 웹 | 한국 | 23 | 10 |
postgresql의 crosstab을 써서 pivot을 할 때 아래와 같이 데이터를 추출하고자 합니다.
일자 | 국가 | 가입건수 | 탈퇴건수 | 국가 | 가입건수 | 탈퇴건수 |
20181231 | 일본 | 12 | 3 | 한국 | 23 | 10 |
Select *
from (
Select '웹' AS divi, '일본' AS resion_cd, '20181231' AS work_date, '12' AS join_cnt, '3' AS disjoin_cnt UNION ALL
Select '웹' AS divi, '한국' AS resion_cd, '20181231' AS work_date, '23' AS join_cnt, '10' AS disjoin_cnt );
crosstab을 써서 하는걸로 작성하고 있는데 초보로 어려움이 많네요...ㅜㅜ
고수님들의 많은 답변 부탁드려요....
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | WITH t AS ( SELECT '웹' divi, '일본' resion_cd, '20181231' work_date, 12 join_cnt, 3 disjoin_cnt UNION ALL SELECT '웹' , '한국' , '20181231' , 23, 10 ) SELECT divi, work_date , MIN ( CASE rn WHEN 1 THEN resion_cd END ) resion_cd_1 , MIN ( CASE rn WHEN 1 THEN join_cnt END ) join_cnt_1 , MIN ( CASE rn WHEN 1 THEN disjoin_cnt END ) disjoin_cnt_1 , MIN ( CASE rn WHEN 2 THEN resion_cd END ) resion_cd_2 , MIN ( CASE rn WHEN 2 THEN join_cnt END ) join_cnt_2 , MIN ( CASE rn WHEN 2 THEN disjoin_cnt END ) disjoin_cnt_2 FROM ( SELECT divi, work_date , resion_cd, join_cnt, disjoin_cnt , ROW_NUMBER() OVER(PARTITION BY divi, work_date ORDER BY 1) rn FROM t ) a GROUP BY divi, work_date ; |