日期:2014-05-18  浏览次数:20516 次

求助一条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.姓名 ')