行列转换问题进阶篇
表table1
id name itemName scores
1 张三 语文 80
1 张三 数学 90
1 张三 外语 100
2 李四 语文 88
2 李四 数学 99
2 李四 外语 66
现在我已经实现了行列转换
declare @sql nvarchar(1000)
set @sql= 'select ID,Name '
select @sql=@sql + ',sum(case ItemName when ' ' '+ItemName + ' ' 'then scores end)[ ' +ItemName + '] '
from (select distinct ItemName from table1) as a
select @sql=@sql + ' from table1 group by ID,Name '
exec(@sql)
id name 语文 数学 外语
1 张三 80 90 100
2 李四 88 99 66
现在我的问题是 如何对列 "语文 ", "数学 ", "外语 " 进行排序,例如 现在的顺序是:
语文 数学 外语 ,如何改成 外语 语文 数学
------解决方案--------------------將你的
declare @sql nvarchar(1000)
set @sql= 'select ID,Name '
select @sql=@sql + ',sum(case ItemName when ' ' '+ItemName + ' ' 'then scores end)[ ' +ItemName + '] '
from (select distinct ItemName from table1) as a
select @sql=@sql + ' from table1 group by ID,Name '
exec(@sql)
改為
Select OrderID = Identity(Int, 1, 1), * Into #T From table1
declare @sql nvarchar(1000)
set @sql= 'select ID,Name '
select @sql=@sql + ',sum(case ItemName when ' ' '+ItemName + ' ' 'then scores end)[ ' +ItemName + '] '
from #T Group By ItemName Order By Min(OrderID)
select @sql=@sql + ' from table1 group by ID,Name order by ID '
exec(@sql)
Drop Table #T
即可
------解决方案--------------------鱼啊,楼主要求的排序是指定的,用临时表没法指定各个课程的先后啊.