我的原表格 grades 是这样的
name subject grade
张三 语文 72
张三 数学 100
张三 英语 75
李四…………………
……………………
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前面几条记录 用的办法是
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相当于 又变回来了。跪求高手指点!
name subject grade
张三 语文 72
张三 数学 100
张三 英语 75
李四…………………
……………………
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前面几条记录 用的办法是
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相当于 又变回来了。跪求高手指点!
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
select top 3 *
from grades
where name not in
(select top 3 name from grades order by name)
order by nameselect 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