水滴石穿

渴望成为高手--Amy.Qiu
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

行列转换pivot与unpivot

Posted on 2008-06-17 11:08  AmyQiu  阅读(256)  评论(0编辑  收藏  举报
pivot and unpivot
select ID, uname, dept from user_info
declare @uname varchar(4000)
set @uname=''

--合并列值方法一(循环)
declare @id int
set @id=(select min(id) from User_info)

while @id<=(select max(id) from User_info)
begin
    
set @uname=@uname+','+(select uname from User_info where id=@id)
    
set @id=@id+1
end
set @uname=stuff(@uname,1,1,'')

print @uname

--合并列值方法二(XML)
select @uname = stuff((select ','+uname from User_Info for xml path('')), 11'')

exec ('
select 
'+@uname+' 
--into ##t
from 
(select uname, dept from User_info) as p
pivot
(max(dept) for uname in (
'+@uname+')) as pvt')

select * from ##t

exec ('
select uname, dept 
from 
(select * from ##T) p
unpivot
(dept for uname in (
'+@uname+'))
as unpvt
')