行转列,分页,求教大虾

现有这样的数据结构:
科目,分数,姓名
语文,60,张三
数学,67,张三
语文,77,李四
数学,85,李四
需要变成这样的:
姓名,语文分数,数学分数
张三,60,67
李四,77,85

目前,我是在前台获取到数据之后通过js代码,进行行转列的,但是现在有一个问题:分页查询
在原表中,每个人的科目可能是不一致的,例如张三存有语文、数学、英语三条记录,而李四存有语文、数学两条记录。
这样的话,做分页查询时,无法准确的传递分页参数。假如都是语文,数学两条记录,要展现两个人的成绩,从原表查询出2*2=4条记录即可。
请问有什么方法解决分页问题或者行转列问题。谢谢。

一般来说是取科目为全集,构建临时表,然后再行转列。没有这个科目的,返回null。

通过sql语句就可以实现,比如select name ,(select class from 表1 where name=A.name and name='语文') 语文 ......
from 表1 as A

描述太笼统了,代码呢?数据是从库里出?为啥不在后台处理? 前台拿到的数据是啥样的? 。。。

一般行转列或者列转换都是通过case when then语句来实现的,具体实现请参考https://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html

描述的确实有点不太清晰

你的表的表头是姓名?

应该表头是姓名,语文,数学 这样吧

分页 select top 2 *from 表名 where id not in (select top (n-1)*2 * from 表名)
id 是一行可以唯一标示这一行的一个属性 可以是一个自增列

建议构建对象存贮对应数据到库,这样就可以结合一些table插件 轻松实现

oracle 数据库可以使用关键字 pivot和Unpivot 可以实现动态的行转列

原数据图 图片说明
图片说明
查询结果
图片说明

最好通過數據庫實現行轉列。

select 姓名,sum(case when 科目="語文" then 分數 else 0 end ),
sum(case when 科目="数学" then 分數 else 0 end ),
。。。。。。。。。。。
from 表名 group by 姓名

這樣在讀取數據時就實現了數據的行轉列。

http://blog.csdn.net/mango_love/article/details/51210020
关于纵横查询,可以参考这个博客,有什么问题私信我

没有的科目用case when把分数设成NULL不就行了,你用一个表格展示数据,科目总得按语文数学英语排列吧,不可能张三从语文开始,李四从数学开始,王五从英语开始;这样怎么可能展示出来