我的原表格 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