高分求一行列互转查询问题
ID      用户名  朋友A   朋友B    朋友C   朋友D   
1	snhame	moon	sky	gostop	fov
2	symbol	moov    chi     she  
3	sn	gigi
-------------------------------------------------
  snhame   symbol  sn
  moon     moov    gigi
  sky      chi
  gostop   she  
  fov    
在以前两种查询当种相互转换,希望朋友多多帮忙
------解决方案--------------------有三例供你参考.
将下表数据:
A                    b           c           d           e          
-------------------- ----------- ----------- ----------- -----------  
x                    1           2           3           4
y                    5           6           7           8
z                    9           10          11          12
转化成如下结果:
a                    x          y          z         
-------------------- ---------- ---------- ----------  
b                    1          5          9
c                    2          6          10
d                    3          7          11
e                    4          8          12
--生成测试数据
create table test1(A varchar(20),b int,c int,d int,e int)
insert into test1 select 'x',1,2 ,3 ,4
insert into test1 select 'y',5,6 ,7 ,8
insert into test1 select 'z',9,10,11,12
--生成中间数据表
declare @s varchar(8000)
set @s='create table test2(a varchar(20)'
select @s=@s+','+A+' varchar(10)' from test1
set @s=@s+')'
exec(@s)
--借助中间表实现行列转换
declare @name varchar(20)
declare t_cursor cursor for  
select name from syscolumns  
where id=object_id('test1') and colid>1 order by colid
open t_cursor
fetch next from t_cursor into @name
while @@fetch_status=0
begin
   exec('select '+@name+' as t into test3 from test1')
   set @s='insert into test2 select '''+@name+''''
   select @s=@s+','''+rtrim(t)+'''' from test3
   exec(@s)
   exec('drop table test3')
   fetch next from t_cursor into @name
end
close t_cursor
deallocate t_cursor
--查看行列互换处理结果
select * from test1
select * from test2
--删除表
drop table test1
drop table test2
----------------------------------------
表1:项目种类  业绩  提成
    洗吹类  200   10
    外卖      100   5
    合计      300   15
转换成:
    项目种类  洗吹类  外卖  合计
    业绩      200     100   300
    提成      10      5     15
if object_id('pubs..tb') is not null
  drop table tb
go
create table tb(
项目种类 varchar(10),
业绩 int,
提成 int
)
insert into tb(项目种类,业绩,提成) values('洗吹类',200,10)
insert into tb(项目种类,业绩,提成) values('外卖'  ,100,5)
insert into tb(项目种类,业绩,提成) values('合计'  ,300,15)
go
select 项目种类,sum(洗吹类) as 洗吹类 , sum(外卖) as 外卖 , sum(合计) as 合计 from
(
select 项目种类 = '业绩',
  洗吹类 = case when 项目种类 = '洗吹类' then 业绩 else 0 end,
  外卖   = case when 项目种类 = '外卖'   then 业绩 else 0 end,
  合计   = case when 项目种类 = '合计'   then 业绩 else 0 end
from tb
union all
select 项目种类 = '提成' ,
  洗吹类 = case when 项目种类 = '洗吹类' then 提成 else 0 end,
  外卖   = case when 项目种类 = '外卖'   then 提成 else 0 end,
  合计   = case when 项目种类 = '合计'   then 提成 else 0 end
from tb
) m
group by 项目种类
order by 项目种类 desc
drop table tb
项目种类 洗吹类  外卖        合计         
---- ----------- ----------- -----------  
业绩   200       100         300
提成   10        5           15
(所影响的行数为 2 行)
数据库中有张表格如下  
       工资   福利  奖金
1月     100    200   300
2月     110    210   310
3月     120    220   320
4月     130    230   330
我想得到的结果是