有一张表 姓名 科目 成绩
张三 语文 98
李四 语文 96
张三 数学 95
李四 数学 92
张三 英语 90
李四 英语 86通过命令生成另外一张表 姓名 语文 数学 英语
张三 98 95 90
李四 96 92 86想破头了也没有什么好办法,解决请大家帮忙给看看,不胜感激,谢谢
张三 语文 98
李四 语文 96
张三 数学 95
李四 数学 92
张三 英语 90
李四 英语 86通过命令生成另外一张表 姓名 语文 数学 英语
张三 98 95 90
李四 96 92 86想破头了也没有什么好办法,解决请大家帮忙给看看,不胜感激,谢谢
姓名,
max(case when 科目='语文' then 成绩 else 0 end) as '语文' ,
max(case when 科目='数学' then 成绩 else 0 end) as '数学',
max(case when 科目='英语' then 成绩 else 0 end) as '英语'
from ta
group by
姓名
-- Author: flystone
-- Version:V1.001
-- Date:2009-11-15 18:48:45
-------------------------------------- Test Data: ta
If object_id('ta') is not null
Drop table ta
Go
Create table ta(姓名 nvarchar(2),科目 nvarchar(2),成绩 int)
Go
Insert into ta
select '张三','语文',98 union all
select '李四','语文',96 union all
select '张三','数学',95 union all
select '李四','数学',92 union all
select '张三','英语',90 union all
select '李四','英语',86
Go
--Start
declare @s varchar(8000)select @s = isnull(@s+',','')+ 'max(case when 科目 = '''+科目+''' then 成绩 else 0 end) as ['+科目+']'
from (select distinct 科目 from ta) a
exec(' select 姓名,'+ @s+' from ta group by 姓名')
--Result:
/*姓名 数学 英语 语文
---- ----------- ----------- -----------
李四 92 86 96
张三 95 90 98*/
--End