行列转换小问题,急,在线给分.

cai114 2007-06-19 02:54:45
1. 行列转换--普通

假设有张学生成绩表(CJ)如下
Name Subject Result 附加
张三 语文 80 1
张三 数学 90 1
张三 物理 85 2
李四 语文 85 3
李四 数学 92 2
李四 物理 82 5

想变成
姓名 语文 附加 数学 附加 物理 附加
张三 80 1 90 1 85 2
李四 85 3 92 2 82 5

declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from CJ group by name'
exec(@sql)
上面的SQL语句要怎么改才能达到我的要求?
...全文
198 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwacky 2007-06-19
  • 打赏
  • 举报
回复
create table cai114 (Name varchar(10),Subject varchar(10),Result int,附加 int)
insert cai114
select '张三', '语文', 80, 1 union all
select '张三', '数学', 90, 1 union all
select '张三', '物理', 85, 2 union all
select '李四', '语文', 85, 3 union all
select '李四', '数学', 92, 2 union all
select '李四', '物理', 82, 5

select Name , Max(case Subject when '语文' then Result else '' end ) as '语文' ,
Max(case Subject when '语文' then 附加 else '' end ) as '附加' ,
Max(case Subject when '数学' then Result else '' end ) as '数学' ,
Max(case Subject when '数学' then 附加 else '' end ) as '附加' ,
Max(case Subject when '物理' then Result else '' end ) as '物理' ,
Max(case Subject when '物理' then 附加 else '' end ) as '附加'

from cai114 group by Name

/*结果
Name 数学 附加 物理 附加 语文 附加
---------- -------------------------------------------------
张三 90 1 85 2 80 1
李四 92 2 82 5 85 3
*/

云中客 2007-06-19
  • 打赏
  • 举报
回复
天行健的不够灵活,如果不仅是这几个课目,如何来写?
云中客 2007-06-19
  • 打赏
  • 举报
回复
同意

一两清风
being21 2007-06-19
  • 打赏
  • 举报
回复
drop table #
hui_hui_2007 2007-06-19
  • 打赏
  • 举报
回复

create table #(姓名 varchar(10),课程 varchar(10),成绩 int,附加 int)
insert #
select '张三', '语文', 80, 1 union all
select '张三', '数学', 90, 1 union all
select '张三', '物理', 85, 2 union all
select '李四', '语文', 85, 3 union all
select '李四', '数学', 92, 2 union all
select '李四', '物理', 82, 5


select 姓名,数学=sum(case 课程 when '数学' then 成绩 end),
附加 = sum(case 课程 when '数学' then 附加 end),物理=sum(case 课程 when '物理' then 成绩 end),
附加 = sum(case 课程 when '物理' then 附加 end),语文=sum(case 课程 when '语文' then 成绩 end),
附加 = sum(case 课程 when '语文' then 附加 end)
from # group by 姓名 Order by 姓名 Desc


drop table #
hellowork 2007-06-19
  • 打赏
  • 举报
回复
/*结果
Name 数学 附加 物理 附加 语文 附加
---------- -------------------------------------------------
张三 90 1 85 2 80 1
李四 92 2 82 5 85 3
*/
hellowork 2007-06-19
  • 打赏
  • 举报
回复
if object_id('tbCJ') is not null
drop table tbCJ
GO
create table tbCJ(Name varchar(10),Subject varchar(10),Result int,附加 int)
insert tbCJ
select '张三', '语文', 80, 1 union all
select '张三', '数学', 90, 1 union all
select '张三', '物理', 85, 2 union all
select '李四', '语文', 85, 3 union all
select '李四', '数学', 92, 2 union all
select '李四', '物理', 82, 5

declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ',' + Subject + '=sum(case Subject when ''' + Subject + ''' then Result end),
附加 = sum(case Subject when ''' + Subject + ''' then 附加 end)'
from tbCJ group by Subject
set @sql = 'select Name' + @sql + ' from tbCJ group by Name Order by Name Desc'
EXEC(@sql)

drop table tbCJ

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧