日期:2014-05-18  浏览次数:20495 次

小小问题行 列 互相转换一下

例如表A
NAME       NUMBER
张三         100
李四         89
王五         70
.....

想要的结果
张三       李四       王五
100           89         70

------解决方案--------------------

--如果NAME是固定的
Select
Max(Case NAME When '张三 ' Then NUMBER Else 0 End) As 张三,
Max(Case NAME When '李四 ' Then NUMBER Else 0 End) As 李四,
Max(Case NAME When '王五 ' Then NUMBER Else 0 End) As 王五
From
A

--如果NAME不是固定的
Declare @S Varchar(8000)
Select @S = ' '
Select @S = @S + ', Max(Case NAME When ' ' ' + NAME + ' ' ' Then NUMBER Else 0 End) As [ ' + NAME + '] '
From A Group By NAME
Select @S = 'Select ' + Stuff(@S, 1, 1, ' ') + ' From A '
EXEC(@S)
------解决方案--------------------
select t= 1,a.* into # from a
declare @sql varchar(8000)
set @sql = 'select '
select @sql = @sql + ',sum(case t when ' ' '+ t + ' ' ' then number end) [ '+name+ '] '
from (select distinct name from #) as b
select @sql = @sql+ ' from # group by t '
exec(@sql)