/*
select *
into test
from ( select 1 seq ,'테스트' 고객 ,'2009-02-04' 일자,'E-MAIL' 방법 union all
select 2 ,'테스트' ,'2009-02-05' ,'전화' union all
select
3 ,'테스트' ,'2009-02-06' ,'기타' union all
select
4 ,'테스트' ,'2009-02-09' ,'기타' union all
select
5 ,'ALBERFLEX' ,'2009-02-04' ,'E-MAIL' union all
select 6
,'test' ,'2009-02-09' ,'기타' ) r
select 고객 ,
일자,row_number() over (partition by 고객 order by 고객, seq) 고객seq,방법
into
test1
from test
*/
DECLARE @sql VARCHAR(max)
set @sql = 'select 고객'
select @sql =
@sql
+ ', max(case when 고객seq = ' + convert(varchar,고객seq) + '
then ' + '''''+일자+''''' + ' else '''' end) 일자'
+ ', max(case when
고객seq = ' + convert(varchar,고객seq) + ' then ' + '''''+방법+''''' + ' else ''''
end) 방법'
from test1 group by 고객seq
select @sql = @sql + ' from test1 group by 고객 order by 고객'
select @sql
EXEC(@sql)
/////////////////////////////////////////
drop table #test
select *
into #test
from
(select '참여자'
구분 ,'박기효' 이름 ,30 cnt , '2009-04' 년월 union all
select
'참여자' ,'박기효' ,31, '2009-05' union all
select '참여자' ,'박기효' ,30, '2009-06'
union all
select '참여자' ,'박기효' ,31, '2009-07' union all
select
'참여자' ,'박기효' ,11, '2009-08' union all
select '참여자' ,'이기수' ,30, '2009-09'
union all
select '참여자' ,'이기수' ,31, '2009-10' union all
select
'참여자' ,'이기수' ,31, '2009-08'
) r
DECLARE @sql VARCHAR(max)
set @sql = 'select 구분 , 이름'
select @sql = @sql
+ ', sum(case when seq = ' +
convert(varchar, r.seq) + ' then cnt else 0 end) [' + 년월 +']'
from ( select
row_number() over (order by 년월) seq
, 년월
from
#test group by 년월 ) r
select @sql = @sql + 'from ( select r.seq,
a.*
from ( select row_number() over (order by
년월) seq , 년월
from #test ) r inner
join #test a on r.년월 = a.년월) rr
group by 구분 , 이름
'
select @sql
EXEC(@sql)
[출처] 동적쿼리 만들기 예제(컬럼이 가변적으로 증가) (파워빌더와 디비의 사랑) |작성자 미르건우
'연구개발 > DBA' 카테고리의 다른 글
작업모니터 (0) | 2013.03.29 |
---|---|
트리거를 이용한 DDL 추적 (0) | 2013.03.21 |
NEWID (0) | 2013.03.08 |
트랜잭션 로그 성능을 향상시키는 8가지 방법 (0) | 2013.02.21 |
트랜잭션 가상 로그 파일 개수 확인 (0) | 2013.02.21 |