求助,表多行数据变成一行多列数据

dirkhuntter 2013-03-28 01:38:51
比如有表A,结构如下:
姓名 课程 成绩
A 语文 30
A 数学 40
B 数论 50
B 英语 20
B 中文 44
C 语文 35

变成如下结果:
姓名 课程 成绩 课程 成绩 课程 成绩
A 语文 30 数学 40 null null
B 数论 40 英语 20 中文 44
C 语文 35 null null null null
...全文
311 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dirkhuntter 2013-04-12
  • 打赏
  • 举报
回复
引用 3 楼 dawugui 的回复:
SQL code ? 1234567891011121314151617181920212223242526 create table tb(姓名 varchar(10),课程 varchar(10), 成绩 int) insert into tb values('A','语文', 30) insert into tb values('A','数学', 40) insert ……
那么请问怎么把这个结果放到一张表中?谢谢。。。
xuegaopeng 2013-03-28
  • 打赏
  • 举报
回复
行转列???
七不语v 2013-03-28
  • 打赏
  • 举报
回复
等大神,一条语句搞不出来
dawugui 2013-03-28
  • 打赏
  • 举报
回复
create table tb(姓名 varchar(10),课程 varchar(10), 成绩 int)
insert into tb values('A','语文', 30)
insert into tb values('A','数学', 40)
insert into tb values('B','数论', 50)
insert into tb values('B','英语', 20)
insert into tb values('B','中文', 44)
insert into tb values('C','语文', 35)
go

declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then 课程 else null end) ''课程'''
                   + ' , max(case px when ''' + cast(px as varchar) + ''' then 成绩 else null end) ''成绩'''
from (select distinct px from (select t.* , px = (select count(1) from tb where 姓名 = t.姓名 and 课程 < t.课程) +  1 from tb t) m) as a
set @sql = @sql + ' from (select t.* , px = (select count(1) from tb where 姓名 = t.姓名 and 课程 < t.课程) +  1 from tb t)m group by 姓名'
exec(@sql) 

drop table tb

/*
姓名         课程         成绩          课程         成绩          课程         成绩          
---------- ---------- ----------- ---------- ----------- ---------- ----------- 
A          数学         40          语文         30          NULL       NULL
B          数论         50          英语         20          中文         44
C          语文         35          NULL       NULL        NULL       NULL
*/
dirkhuntter 2013-03-28
  • 打赏
  • 举报
回复
这个列是个动态的,有的人有一个成绩,有的人可能有几个成绩
szm341 2013-03-28
  • 打赏
  • 举报
回复
select COALESCE(a.name,b.name,c.name,d.name),a.class,a.score ,b.class,b.score,c.class,c.score,d.class,d.score from tb a full join tb b on a.name=b.name full join tb c on a.name=c.name full join tb d on a.name=d.name where a.class='语文' and b.class='数学' and c.class='英语' and d.class='中文' 貌似不太符合呵呵

22,297

社区成员

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

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