表的转换

nbtvujwc 2005-10-31 03:14:13
请教大家一个问题:
如何把一个一维表转换成二维表
程序该如何写呢?
一维表如下:
年级 课目 人数
2001 语文 20
2001 数学 15
2002 语文 20
2002 数学 15
2003 语文 20
2003 数学 15
如何转换成如下格式的二维表:
语文 数学

2001 20 15

2002 20 15

2003 20 15

...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp321002 2005-10-31
  • 打赏
  • 举报
回复
--好象,我回答过吧!
--两种方式,一种直接写,一种用动态SQL
churchatp1 2005-10-31
  • 打赏
  • 举报
回复
select 年级,(select 人数 from tablename a where a.年级=b.年级 and a.课目='数学') as 数学 ,(select 人数 from tablename a where a.年级=b.年级 and a.课目='语文') as 语文 from tablename b group by 年级 order by 年级
dulei115 2005-10-31
  • 打赏
  • 举报
回复
if object_id('test') is not null drop table test
select '2001' as 年级, '语文' as 课目, 20 as 人数
into test
union select '2001', '数学', 15
union select '2002', '语文', 20
union select '2002', '数学', 15
union select '2003', '语文', 20
union select '2003', '数学', 15

select * from test

declare @s varchar(1000)
set @s = 'select 年级'
select @s = @s + ', sum(case 课目 when ''' + 课目 + ''' then 人数 end) as ' + 课目
from (select distinct 课目 from test) a
set @s = @s + ' from test group by 年级'
exec(@s)

drop table test

/*
年级 课目 人数
2001 数学 15
2001 语文 20
2002 数学 15
2002 语文 20
2003 数学 15
2003 语文 20
*/

/*
年级 数许 语文
2001 15 20
2002 15 20
2003 15 20
*/

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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