日期:2014-05-18  浏览次数:20446 次

关于分页查询和行转列结合使用的问题
我的原表格 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 grades
where 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 姓名)

终究还是自己啊