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