如何得到这样的记录集?

myhot-河马吃草 2004-06-22 08:11:28
A学生表:字段如下:
学生证 姓名 性别 班级
A00001 张三
A00002 李四

B成绩表

学生证 学期 课目 成绩
A00001 01 数学 90
A00001 01 语文 90
A00001 01 英文 90
......
课目还有许多...是不定的..

那么如何生成这样的记录列出呢.?使课目变为列和姓名等在一行上?课目内容为成绩

学生证 姓名 数学 语文 英文 ....(不定)
A00001 张三 90 90 90
A00002 李四 ......


哥哥们帮忙........ :)


...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haipingma 2004-06-22
  • 打赏
  • 举报
回复
up
---涛声依旧--- 2004-06-22
  • 打赏
  • 举报
回复
--測試
create table 學生表(學生証 varchar(10), 姓名 varchar(8), 性別 char(2), 班級 varchar(10))
insert 學生表(學生証,姓名)
select 'A00001', '張三'
union all select 'A00002', '李四'

create table 成績表(學生証 varchar(10), 學期 varchar(10), 課目 varchar(20), 成績 decimal(9,2))
insert 成績表(學生証,學期,課目,成績)
select 'A00001', '01', '數學', 90
union all select 'A00001', '01', '語文', 90
union all select 'A00001', '01', '英文', 90

--查詢
declare @s varchar(8000)
set @s=''
select @s=@s+',['+課目+']=sum(case b.課目 when '''+課目+''' then 成績 else 0 end)'
from 成績表
group by 課目
print @s
exec('select a.學生証,a.姓名'+@s+'
from 學生表 a join 成績表 b on a.學生証=b.學生証
group by a.學生証,a.姓名')

--結果
學生証 姓名 英文 語文 數學
A00001 張三 90.00 90.00 90.00
zjcxc 元老 2004-06-22
  • 打赏
  • 举报
回复
declare @s varchar(8000)
set @s=''
select @s=@s+',['+课目+']=sum(case b.课目 when '''+课目+''' then 成绩 else 0 end)'
from 成绩表
group by 课目
exec('select a.学生证,a.姓名'+@s+'
from 学生表 a join 成绩表 b on a.学生证=b.学生证
group by a.学生证,a.姓名')

34,587

社区成员

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

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