아래 테이블의 행과 열을 아래처럼 바꾸고 싶습니다.
검색해보니 피벗이나 case 문으로 처리 가능할 것 같은데요..
실력이 형편 없어 잘 안되네요..
도와주시면 감사하겠습니다.
변경 전
구분 | 소속부서 | 직위 | 성명 | 일자 | 기타 |
구분_1 | 영업팀 | 과장 | name1 | 01월 21일 | OK |
구분_2 | 임원 | 부사장 | name2 | 01월 22일 | OK |
구분_3 | 임원 | 대표이사 | name3 | 01월 23일 | OK |
구분_4 | 영업팀 | 과장 | name4 | 01월 24일 | OK |
구분_5 | DfAM | 소장 | name5 | 01월 25일 | OK |
구분_6 | 제조 | 과장 | name6 | 01월 26일 | OK |
구분_7 | 구매 | 차장 | name7 | 01월 27일 | OK |
구분_8 | 품질 | 차장 | name8 | 01월 28일 | OK |
구분_9 | 영업팀 | 과장 | name9 | 01월 29일 | OK |
구분_10 | 임원 | 대표이사 | name10 | 01월 30일 | OK |
변경 후
구분 | 구분_1 | 구분_2 | 구분_3 | 구분_4 | 구분_5 | 구분_6 | 구분_7 | 구분_8 | 구분_9 | 구분_10 |
소속부서 | 영업팀 | 임원 | 임원 | 영업팀 | DfAM | 제조 | 구매 | 품질 | 영업팀 | 임원 |
직위 | 과장 | 부사장 | 대표이사 | 과장 | 소장 | 과장 | 차장 | 차장 | 과장 | 대표이사 |
성명 | name1 | name2 | name3 | name4 | name5 | name6 | name7 | name8 | name9 | name10 |
일자 | 01월 21일 | 01월 22일 | 01월 23일 | 01월 24일 | 01월 25일 | 01월 26일 | 01월 27일 | 01월 28일 | 01월 29일 | 01월 30일 |
기타 | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK |
with res as
(
select '구분_1' [구분],'영업팀' [소속부서],'과장' [직위],'name1' [성명],'01월 21일' [일자],'OK' [기타] union all
select '구분_2' [구분],'임원' [소속부서],'부사장' [직위],'name2' [성명],'01월 22일' [일자],'OK' [기타] union all
select '구분_3' [구분],'임원' [소속부서],'대표이사' [직위],'name3' [성명],'01월 23일' [일자],'OK' [기타] union all
select '구분_4' [구분],'영업팀' [소속부서],'과장' [직위],'name4' [성명],'01월 24일' [일자],'OK' [기타] union all
select '구분_5' [구분],'DfAM' [소속부서],'소장' [직위],'name5' [성명],'01월 25일' [일자],'OK' [기타] union all
select '구분_6' [구분],'제조' [소속부서],'과장' [직위],'name6' [성명],'01월 26일' [일자],'OK' [기타] union all
select '구분_7' [구분],'구매' [소속부서],'차장' [직위],'name7' [성명],'01월 27일' [일자],'OK' [기타] union all
select '구분_8' [구분],'품질' [소속부서],'차장' [직위],'name8' [성명],'01월 28일' [일자],'OK' [기타] union all
select '구분_9' [구분],'영업팀' [소속부서],'과장' [직위],'name9' [성명],'01월 29일' [일자],'OK' [기타] union all
select '구분_10' [구분],'임원' [소속부서],'대표이사' [직위],'name10' [성명],'01월 30일' [일자],'OK' [기타]
)
select b.no
, max(case when [구분] = '구분_1' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_1]
, max(case when [구분] = '구분_2' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_2]
, max(case when [구분] = '구분_3' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_3]
, max(case when [구분] = '구분_4' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_4]
, max(case when [구분] = '구분_5' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_5]
, max(case when [구분] = '구분_6' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_6]
, max(case when [구분] = '구분_7' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_7]
, max(case when [구분] = '구분_8' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_8]
, max(case when [구분] = '구분_9' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_9]
, max(case when [구분] = '구분_10' then case b.no
when 1 then [구분]
when 2 then [소속부서]
when 3 then [직위]
when 4 then [성명]
when 5 then [일자]
when 6 then [기타]
end end) [구분_10]
from res cross join ( select 1 no union select 2 no union select 3 no union select 4 no union select 5 no union select 6 no ) b
group by b.no
pivot을 이용할수 도 있을것 같네요...