create table #tb(id int ,姓名 varchar(10) , 课程 varchar(10) , 分值 varchar(10) )
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')select * from #tb
drop table #tb
我现在想实现的是:课程成为列名、然后分值对应到下面。怎么实现?
谢谢.... 我看着有转换成xml的、有用case的、有用函数PIVOT的啊 给我提供一个思路或者是存储过程呗。。
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')select * from #tb
drop table #tb
我现在想实现的是:课程成为列名、然后分值对应到下面。怎么实现?
谢谢.... 我看着有转换成xml的、有用case的、有用函数PIVOT的啊 给我提供一个思路或者是存储过程呗。。
http://www.cnblogs.com/insus/archive/2012/03/28/2421230.html
(
select 姓名,课程,分值 from #tb
) AS a
PIVOT
(
MAX(分值) FOR 课程 IN (语文,数学,物理)
) AS pvt
李四 d e f
张三 a b c
我就要的是你的写的结果啊。可是你这样是不行的。max是聚合函数啊 我的值是文本啊。不能max的啊
此处加聚合函数的意思是
如果你有多条数据 例如create table #tb(id int ,姓名 varchar(10) , 课程 varchar(10) , 分值 varchar(10) )
insert into #tb values(1,'张三' , '语文' , 'a')
insert into #tb values(2,'张三' , '数学' , 'b')
insert into #tb values(3,'张三' , '物理' , 'c')
insert into #tb values(4,'李四' , '语文' , 'd')
insert into #tb values(5,'李四' , '数学' , 'e')
insert into #tb values(6,'李四' , '物理' , 'f')
insert into #tb values(6,'李四' , '物理' , 'g') -- 此处有2个李四的物理成绩,得用聚合函数合并,至于如何合并,取决于你,我一般都是用MAX来定义的,其实此处出现2个李四的物理成绩是错误的,应该在录入的时候就提醒录入的人。