我的原表格 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
[size=14px][color=#FF9900]这上面的是行转列 成功之后 表格式这样的
----------------------------------------
姓名 语文 数学 英语
张三 72 100 75
李四 55 66 77
王五 78 69 53
赵六 21 37 58
…………
之后 如何用下面的这种分页查询 结合上面行转列 完成 将行转列当成子表(子查询) 的分页查询 (要求不能创建新表或者新视图之类的,就用SQL查询语句)
分页查询[/size][/color]
- SQL code
select top 3 * from gradeswhere name not in(select top 3 name from grades order by name)order by name
最后效果是 4-6条记录
---------大概效果-----------
姓名 语文 数学 英语
赵六 21 37 58
朱七 72 100 75
陈八 78 69 53
------解决方案--------------------
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 where 姓名 not in(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
order by 姓名)
终究还是自己啊