求T_SQL语句!
原表是:姓名课程成绩张三数学90张三英语78张三语文50李四英语45李四体育99我想实现的效果是:姓名数学英语语文体育张三907850null李四null45null99...
原表是:
姓名 课程 成绩
张三 数学 90
张三 英语 78
张三 语文 50
李四 英语 45
李四 体育 99
我想实现的效果是:
姓名 数学 英语 语文 体育
张三 90 78 50 null
李四 null 45 null 99
谢谢各位大哥!
我是sql 08
注意每个人的课程有相同的,也有不同的部分
麻烦各位大哥也简要的说一下思路。。。小弟在这里谢谢各位了! 展开
姓名 课程 成绩
张三 数学 90
张三 英语 78
张三 语文 50
李四 英语 45
李四 体育 99
我想实现的效果是:
姓名 数学 英语 语文 体育
张三 90 78 50 null
李四 null 45 null 99
谢谢各位大哥!
我是sql 08
注意每个人的课程有相同的,也有不同的部分
麻烦各位大哥也简要的说一下思路。。。小弟在这里谢谢各位了! 展开
展开全部
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 SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 动态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)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
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 SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 动态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)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
展开全部
在查询分析器中复制下列代码:
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql +
',sum(case subject when ''' + subject +
''' then source else 0 end) as ''' + subject +
''''
from (select distinct subject from test) as a
select @sql
select @sql = @sql + ' from test group by name'
exec(@sql) --注意:要加括号()
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql +
',sum(case subject when ''' + subject +
''' then source else 0 end) as ''' + subject +
''''
from (select distinct subject from test) as a
select @sql
select @sql = @sql + ' from test group by name'
exec(@sql) --注意:要加括号()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法一:大家都常用的方法:select case
方法二:SQL2005/2008中的 Pivot 方法
Pivot 方法 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)。
给个(Pivot 方法)实例你,自己慢慢套吧。。希望对你有所帮助
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>,
...
[last pivoted column] AS <column name>
FROM
(<SELECT query that produces the data>)
AS <alias for the source query>
PIVOT
(
<aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
IN ( [first pivoted column], [second pivoted column],
... [last pivoted column])
) AS <alias for the pivot table>
<optional ORDER BY clause>;
方法二:SQL2005/2008中的 Pivot 方法
Pivot 方法 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)。
给个(Pivot 方法)实例你,自己慢慢套吧。。希望对你有所帮助
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>,
...
[last pivoted column] AS <column name>
FROM
(<SELECT query that produces the data>)
AS <alias for the source query>
PIVOT
(
<aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
IN ( [first pivoted column], [second pivoted column],
... [last pivoted column])
) AS <alias for the pivot table>
<optional ORDER BY clause>;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询