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

关于一个子查询的有关问题

2012-06-02 
关于一个子查询的问题我的原表格 grades 是这样的namesubjectgrade张三语文72张三数学100张三英语75李四……

关于一个子查询的问题
我的原表格 grades 是这样的
name subject grade
张三 语文 72
张三 数学 100
张三 英语 75
李四…………………
……………………

SQL code
select  name 姓名,  max(case subject when '语文' then grade else 0 end) 语文,  max(case subject when '数学' then grade else 0 end) 数学,  max(case subject when '英语' then grade else 0 end) 英语from grades group by name


这上面的是行转列 成功之后 表格式这样的
----------------------------------------
姓名 语文 数学 英语
张三 72 100 75
李四 55 66 77
王五 78 69 53
赵六 21 37 58
…………
之后我希望 只需要 查TOP前面几条记录 用的办法是
SQL code
select top 3 * from grades where exists(select  name 姓名,  max(case subject when '语文' then grade else 0 end) 语文,  max(case subject when '数学' then grade else 0 end) 数学,  max(case subject when '英语' then grade else 0 end) 英语from grades group by name)


结果却

name subject grade
张三 语文 72
张三 数学 100
张三 英语 75

相当于 又变回来了。

跪求高手指点!

[解决办法]
SQL code
select top 3 * from (select  name 姓名,  max(case subject when '语文' then grade else 0 end) 语文,  max(case subject when '数学' then grade else 0 end) 数学,  max(case subject when '英语' then grade else 0 end) 英语from grades group by name)t 

热点排行