关于表的转换

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

2001 20 15

2002 20 15

2003 20 15
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nbtvujwc 2005-10-31
  • 打赏
  • 举报
回复
动态的那个,哪里有参考资料看!
nbtvujwc 2005-10-31
  • 打赏
  • 举报
回复
谢谢,我试试看了!
zlp321002 2005-10-31
  • 打赏
  • 举报
回复
--动态SQL
--测试环境
Create Table #(年级 varchar(10),课目 varchar(10),人数 int)
insert into # select '2001','语文',20
union all select '2001','数学',15
union all select '2002','语文',20
union all select '2002','数学',15
union all select '2003','语文',20
union all select '2003','数学',15


--动态SQL
declare @s varchar(2000)
set @s='SELECT 年级'
select @s=@s+',['+课目+']=max(case when 课目='''+课目+''' then 人数 end)'
from #
group by 课目
set @s=@s+' from # group by 年级 '
exec(@s)

--结果
年级 数学 语文
---------- ----------- -----------
2001 15 20
2002 15 20
2003 15 20

--删除测试环境
Drop table #

凨叔 2005-10-31
  • 打赏
  • 举报
回复
declare @TB table([年级] int, [科目] varchar(10), [人数] int);
insert into @TB values(2001, '语文', 20);
insert into @TB values(2001, '数学', 15);
insert into @TB values(2002, '语文', 20);
insert into @TB values(2002, '数学', 15);
insert into @TB values(2003, '语文', 20);
insert into @TB values(2003, '数学', 15);

select [年级], [语文]=SUM(case when [科目]='语文' then [人数] else 0 end)
, [数学]=SUM(case when [科目]='数学' then [人数] else 0 end)
from @TB group by [年级]
zlp321002 2005-10-31
  • 打赏
  • 举报
回复

SELECT
年级,
[数学]=max(case when 课目='数学' then 人数 end),
[语文]=max(case when 课目='语文' then 人数 end)
from #
group by 年级

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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