行转列,分页,求教大虾 5C

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

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

11个回答

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

m0_37950012
得儿飘 谢谢,但是我的应用场景中,科目是不一定的,不确定有多少个,不确定是什么
大约 2 年之前 回复

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

jackwan99
jackwan99 回复jackwan99: sum(case when)实现
大约 2 年之前 回复
jackwan99
jackwan99 为什么不在数据库层次实现呢。那个比较简单。
大约 2 年之前 回复
m0_37950012
得儿飘 请明示,这个取全集建临时表要怎样写
大约 2 年之前 回复

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

sinat_33200184
sinat_33200184 回复咋不上天: 既然是json 肯定是经过处理的 在封成json之前把数据弄好,该排序的排序,两条的填充成3条
大约 2 年之前 回复
m0_37950012
得儿飘 数据是从库里查出的,前台拿到是json格式数据,[{},{},{}...]
大约 2 年之前 回复

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

m0_37950012
得儿飘 谢谢。
大约 2 年之前 回复

描述的确实有点不太清晰

m0_37950012
得儿飘 sorry...
大约 2 年之前 回复

你的表的表头是姓名?

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

分页 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
关于纵横查询,可以参考这个博客,有什么问题私信我

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问