在网上找的例子:
//生成表
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go//用此SQL就能达到动态行转列效果
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)出来结果是:
姓名 数学 物理 语文
李四 84 94 74
张三 83 93 74数学在最前面了 完全是按照首字字母排序的
我想达到的效果是:
姓名 语文 数学 物理
李四 74 84 94
张三 74 83 93
就是说按照插入的顺序来排序 也可以再加个自增ID 根据自增ID排序 小弟不会写 请高手解答!!!
//生成表
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go//用此SQL就能达到动态行转列效果
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)出来结果是:
姓名 数学 物理 语文
李四 84 94 74
张三 83 93 74数学在最前面了 完全是按照首字字母排序的
我想达到的效果是:
姓名 语文 数学 物理
李四 74 84 94
张三 74 83 93
就是说按照插入的顺序来排序 也可以再加个自增ID 根据自增ID排序 小弟不会写 请高手解答!!!
insert into tb values(1,'张三' , '语文' , 74)
insert into tb values(2,'张三' , '数学' , 83)
insert into tb values(3,'张三' , '物理' , 93)
insert into tb values(4,'李四' , '语文' , 74)
insert into tb values(5,'李四' , '数学' , 84)
insert into tb values(6,'李四' , '物理' , 94)declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select 课程,id from tb t where id=(select top 1 id from tb where t.课程=课程)) as a order by ID
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)/*
姓名 语文 数学 物理
李四 74 84 94
张三 74 83 93*/