当前位置: 代码迷 >> Sql Server >> 关于一个子查询的有关问题
  详细解决方案

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

热度:50   发布时间:2016-04-27 12:34:05.0
关于一个子查询的问题
我的原表格 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
  相关解决方案