我现在有一个表
id name score kemu
1 张三 100 语文
1 张三 40 数学
2 张张 20 英语
3 李斯 60 语文我要的效果是
id name 语文 数学 英语
1 张三 100 40
2 张张 20
3 李斯 60
写出语句或思路,谢谢了
id name score kemu
1 张三 100 语文
1 张三 40 数学
2 张张 20 英语
3 李斯 60 语文我要的效果是
id name 语文 数学 英语
1 张三 100 40
2 张张 20
3 李斯 60
写出语句或思路,谢谢了
不知道符不符合lz要求哦
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?33238if not object_id('Class') is null
drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
Go
--2000方法:
动态:declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
from Class group by[Course]
exec('select [Student]'+@s+' from Class group by [Student]')
生成静态:select
[Student],
[数学]=max(case when [Course]='数学' then [Score] else 0 end),
[物理]=max(case when [Course]='物理' then [Score] else 0 end),
[英语]=max(case when [Course]='英语' then [Score] else 0 end),
[语文]=max(case when [Course]='语文' then [Score] else 0 end)
from
Class
group by [Student]GO
动态:declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course]
exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')生成静态:
select *
from
Class
pivot
(max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b生成格式:
/*
Student 数学 物理 英语 语文
------- ----------- ----------- ----------- -----------
李四 77 85 65 65
张三 87 90 82 78(2 行受影响)
*/
declare @sql varchar(8000)
set @sql = 'select [id],[name]'
select @sql = @sql + ' , max(case [kemu] when ''' + [kemu] + ''' then score else 0 end) [' + [kemu] + ']'
from (select distinct [kemu] from t_csdn) as a
set @sql = @sql + ' from t_csdn group by [id],[name] order by [id]'
exec(@sql)