학생별로 잘본 과목 순서대로 정렬하고 싶습니다.
점수 정렬 및 과목이름 정렬이요.
그러니까,...
=> 원본데이타
id 수학 영어 국어
1 80 90 100
2 95 80 75
3 80 70 90
=> 결과
id 과목1 과목2 과목3 과목1이름 과목2이름 과목3이름
1 100 90 80 국어 영어 수학
2. 95 80 75 수학 영어 국어
3 90 80 70 국어 수학 영어
이렇게 출력하고 싶은데 쿼리를 어케 짜야할까요?
도움 부탁드립니다 ㅜㅜ
unpivot , pivot을 사용 할수 있는 2005이상 버젼일 때 입니다.
미만 버젼일때는
unpivot -> 조합(cross join)
pivot -> case 문 으로 구현 가능 합니다.
1) unpivot 으로 과목,점수를 컬럼화 하신다음
2) 중첩피봇(멀티피봇) 으로 처리 하시면 원하시는 결과를 얻으실수 있습니다.
unpivot 으로 처리된 자료를
case 를 이용해서 컬럼화 하시는 방법이 편할듯 합니다..
unpivot -> 중첩피봇 처리 하는 방법 ( case 문으로 하는것 직접 해보세요... )
with res as (
select 1 id ,80 [수학] ,90 [영어] ,100 [국어] union all
select 2 ,95 ,80 ,75 union all
select 3 ,80 ,70 ,90 ) ,
result as (
select *
, '과목'+convert(varchar, ROW_NUMBER() over ( partition by id order by [점수] desc )) seq1
, '과목이름'+convert(varchar, ROW_NUMBER() over ( partition by id order by [점수] desc )) seq2
from res
unpivot
( [점수] for [과목] in([수학],[영어],[국어])) as p )
select id
, sum([과목1]) [과목1]
, sum([과목2]) [과목2]
, sum([과목3]) [과목3]
, max([과목이름1]) [과목이름1]
, max([과목이름2]) [과목이름2]
, max([과목이름3]) [과목이름3]
from result
pivot (
sum([점수])
for seq1 in ( [과목1],[과목2],[과목3])
) as pv
pivot (
max([과목])
for seq2 in ( [과목이름1],[과목이름2],[과목이름3])
) as pv
group by id