首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一条SQL语句-必须在07年08月11日早上7:00前完成

2012-01-29 
求助一条SQL语句--必须在07年08月11日早上7:00前完成求助SQL题目表Aid姓名001陈刚002李芳003王明……表Bid科

求助一条SQL语句--必须在07年08月11日早上7:00前完成
求助SQL题目

表A
id姓名
001陈刚
002李芳
003王明
……

表B
id科目分数
001语文78
002英语90
001英语88
003数学99
002语文60
001数学54
003英语23
……

写一条SQL,要求输出:
姓名,语文分数,数学分数,英语分数

======================================
输出的结果应该是:
陈刚   78     54     88
李芳   60     null     90
王明   null     99       23  


[解决办法]
select 姓名,语文=(select 分数 from 表B where 科目= '语文 ' and id=表A.id),数学=(select 分数 from 表B where 科目= '数学 ' and id=表A.id),英语=(select 分数 from 表B where 科目= '英语 ' and id=表A.id) from 表A


助人为快乐之本!
[解决办法]
---Lz问题应该解决了吧
---如果科目固定只有语文、数据、英语
Select
A.姓名,
Max(Case B.科目 When '语文 ' Then B.分数 Else Null End) As 语文分数,
Max(Case B.科目 When '数学 ' Then B.分数 Else Null End) As 数学分数,
Max(Case B.科目 When '英语 ' Then B.分数 Else Null End) As 英语分数
From
表B B
Inner Join
表A A
On A.id=B.id Group By A.姓名

---如果科目不固定有更多的科目
Declare @sql Varchar(8000)
Set @sql= ' '
Select @sql=@sql+ ',Max(Case 科目 When ' ' '+科目+ ' ' ' Then 分数 Else Null End) As [ '+科目+ '分数] '
From 表B Group By 科目
Exec( 'Select A.姓名 '+@sql+ 'From 表B B Inner Join 表A A On A.id=B.id Group By A.姓名 ')

热点排行