안녕하세요! 가입 한지 오래됐는데 첫 질문을 남깁니다.
지금 디비 테이블 주어진 테이블은 이건데요.
pt_no | wid | mb_id | pt_type | pt_code | pt_name | pt_price | pt_date |
1 | 1 | demo1 | 1 | 20210202533839 | 기본급 | 3000000 | 2021-01-10 |
2 | 1 | demo1 | 1 | 20210203289904 | 수당 | 1000000 | 2021-01-10 |
여기서 쭈루룩 세로로 데이터가 출력됩니다.
html 테이블 에서 디비 레코드를 뽑아서 밑에 처럼 만들고싶어요.
날짜 | 형태 | 기본급 | 수당1 | 수당2 | 수당3 | 수당4 | 수당5 | 수당6 | 수당7 | 수당8 | 합계 |
2021-01-10 | 1 | 3000000 | 100000 | 100000 | ... | ... | ... | ... | ... | .... | 합계 |
2021-02-10 | 1 | 3000000 | 100000 | 100000 | ... | ... | ... | ... | ... | ... | 합계 |
여기서 기본급부터 수당1 ~ 수당8까지 가로로 표시하고픈데 아무리 생각해도 어렸습니다..
어떻게 해야할까요 읽어주셔서 감사합니다.
with t(pt_no, wid, mb_id, pt_type , pt_code, pt_name, pt_price, pt_date) as (select 1, 1, 'demo1', 1, '20210202533839', '기본급', 3000000, '2021-01-10' from dual union all select 2, 1, 'demo1', 1, '20210203289904', '수당1' , 1000000, '2021-01-10' from dual union all select 3, 1, 'demo1', 1, '20210203289904', '수당2' , 1000000, '2021-01-10' from dual union all select 4, 1, 'demo2', 1, '20210202533839', '기본급', 4000000, '2021-01-10' from dual union all select 5, 1, 'demo2', 1, '20210203289904', '수당1' , 2000000, '2021-01-10' from dual ) select pt_date, mb_id, pt_type , nvl(max(A), 0) as "기본급" , nvl(max(B), 0) as "수당1" , nvl(max(C), 0) as "수당2" , nvl(max(D), 0) as "수당3" , nvl(max(E), 0) as "수당4" , nvl(max(F), 0) as "수당5" , nvl(max(G), 0) as "수당6" , nvl(max(H), 0) as "수당7" , nvl(max(I), 0) as "수당8" , nvl(max(tot_price), 0) as "합계" from (select pt_no, wid, mb_id, pt_type , pt_code, pt_name, pt_price, pt_date , sum(pt_price) over(partition by mb_id) tot_price from t) pivot(max(pt_price) for pt_name in ('기본급' as A , '수당1' as B, '수당2' as C , '수당3' as D, '수당4' as E , '수당5' as F, '수당6' as G , '수당7' as H, '수당8' as I)) group by pt_date, mb_id, pt_type ;
집계 기준이나 항목 기준이 뭔지 제시되어 있지 않네요?
1. 집계(그룹핑) 기준은 뭔가요?
- GROUP BY wid, mb_id, pt_date, pt_type ?
2. 항목을 나누는 기준이 뭔가요?
- pt_no 에 따라 나뉘나요?
- pt_code 에 따라 나뉘나요?
- pt_name 에 따라 나뉘나요?
SELECT wid , mb_id , pt_date , pt_type , SUM(DECODE(pt_code, '20210202533839', pt_price)) 기본급 , SUM(DECODE(pt_code, '20210203289904', pt_price)) 수당1 , SUM(DECODE(pt_code, '22222222222222', pt_price)) 수당2 , SUM(DECODE(pt_code, '33333333333333', pt_price)) 수당3 , SUM(DECODE(pt_code, '44444444444444', pt_price)) 수당4 , SUM(DECODE(pt_code, '55555555555555', pt_price)) 수당5 , SUM(DECODE(pt_code, '66666666666666', pt_price)) 수당6 , SUM(DECODE(pt_code, '77777777777777', pt_price)) 수당7 , SUM(DECODE(pt_code, '88888888888888', pt_price)) 수당8 , SUM(pt_price) 합계 FROM t GROUP BY wid, mb_id, pt_date, pt_type ;
SELECT wid , mb_id , pt_date , pt_type , SUM(CASE pt_code WHEN '20210202533839' THEN pt_price END) 기본급 , SUM(CASE pt_code WHEN '20210203289904' THEN pt_price END) 수당1 , SUM(CASE pt_code WHEN '22222222222222' THEN pt_price END) 수당2 , SUM(CASE pt_code WHEN '33333333333333' THEN pt_price END) 수당3 , SUM(CASE pt_code WHEN '44444444444444' THEN pt_price END) 수당4 , SUM(CASE pt_code WHEN '55555555555555' THEN pt_price END) 수당5 , SUM(CASE pt_code WHEN '66666666666666' THEN pt_price END) 수당6 , SUM(CASE pt_code WHEN '77777777777777' THEN pt_price END) 수당7 , SUM(CASE pt_code WHEN '88888888888888' THEN pt_price END) 수당8 , SUM(pt_price) 합계 FROM t GROUP BY wid, mb_id, pt_date, pt_type ;