请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Zhangli

金牌服务用户

9

主题

30

帖子

193

积分

金牌服务用户

积分
193
Zhangli
金牌服务用户   /  发表于:2025-1-23 16:25  /   查看:154  /  回复:10
100金币
数据表结构:

1. 学生信息表,记录的学生基本信息
2. 各学期成绩信息表,记录的是所有学生历年历次考试成绩
3. 现需要将学生的成绩展示为如下样式:

4. 我的设计思路是:做了视图,用学生信息表与成绩数据进行了5次(初一上、初一下、初二上、初二下、初三上)左连接,最后生成了如上视图表
5. 现在出现的问题是:数据量少性能还凑合,如果数据量多就卡的要命,加载数据需要10来分钟左右,出现了致命的性能问题,想求助高手们如何能解决这个问题
6. 尝试用了ODAT公式,数据量一大也卡的不行
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

您好,我们 demo 里的学生表和成绩表分开设计我觉得是没问题的。 从需求实现来讲,需要做行转列,需要点击成绩能够弹出修改页面或者支持直接修改(修改的是成绩表的内容)。 目前实现的方式不唯一。 1、写 SQL 视图做行列专列,用表格做展示,成绩可以在页面表格上增加编辑按钮弹出页面进行编辑。您 demo 里使用是多次关联做的行专列,也可以考虑使用 case when 类似于: 2、在成绩表设置关联到学生表,然后用数据透视表或者 ...

10 个回复

倒序浏览
最佳答案
最佳答案
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2025-1-23 16:25:09
来自 7#
您好,我们 demo 里的学生表和成绩表分开设计我觉得是没问题的。
从需求实现来讲,需要做行转列,需要点击成绩能够弹出修改页面或者支持直接修改(修改的是成绩表的内容)。
目前实现的方式不唯一。
1、写 SQL 视图做行列专列,用表格做展示,成绩可以在页面表格上增加编辑按钮弹出页面进行编辑。您 demo 里使用是多次关联做的行专列,也可以考虑使用 case when 类似于:
SELECT
        userid,
        SUM( CASE subjectName WHEN '语文' THEN score ELSE 0 END ) '语文',
        SUM( CASE subjectName WHEN '数学' THEN score ELSE 0 END ) '数学',
        SUM( CASE subjectName WHEN '英语' THEN score ELSE 0 END ) '英语',
        SUM( CASE subjectName WHEN '政治' THEN score ELSE 0 END ) '政治'
FROM
        tb_score
GROUP BY
        userid;

2、在成绩表设置关联到学生表,然后用数据透视表或者表格报表做展示,数据透视表支持直接填报和设置点击事件,表格报表也支持直接填报。用这两个组件我们需求也是可以实现的。

然后从性能考虑上来讲,目前来看,性能的问题最主要原因是因为我们的数据量比较大,这个和我们的实现方案无关。
如果不是一定要一次性把所有数据展示出来,页面展示可以不用展示全量数据,比如按照年纪、学校去做过滤,或者做分页,即每次展示部分数据,就可以解决数据量大带来的性能问题。另外我们可以给数据表过滤的字段和关联的字段创建索引,也能解决部分性能问题。



回复 使用道具 举报
Grayson.Shang活字格认证 Wyn认证
超级版主   /  发表于:2025-1-23 18:25:40
2#
大佬您好,咱们这个视图的写法可能和咱们这个需求不太相符。
具体的SQL可以参考下面的帖子写法
SQL Server 行转列,列转行。多行转成一列 - NO.27 - 博客园

当然还有一种方式是,通过活字格的表格报表插件,也可以实现类似的功能,而且实现起来会比较简单

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Zhangli
金牌服务用户   /  发表于:2025-1-24 09:11:27
3#
Grayson.Shang 发表于 2025-1-23 18:25
大佬您好,咱们这个视图的写法可能和咱们这个需求不太相符。
具体的SQL可以参考下面的帖子写法
SQL Serve ...

你好,感谢你的帮助,但有一个问题,如果用报表,我不能实现点选某条记录跳转到修改成绩页面
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2025-1-24 09:46:19
4#
您好,也可以直接使用数据透视表
第二十章 数据透视表 - 活字格V10帮助文档
效果如下


表格中开启了编辑之后,数据透视表可以开启填报模式直接修改





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Zhangli
金牌服务用户   /  发表于:2025-1-24 18:27:14
5#
本帖最后由 Zhangli 于 2025-1-24 18:40 编辑
Joe.xu 发表于 2025-1-24 09:46
您好,也可以直接使用数据透视表
第二十章 数据透视表 - 活字格V10帮助文档
效果如下

好的,谢谢帮助,我试试

我想要的效果,不仅是行转列的问题,还有关联主表的问题
行转列是把所有学生历年历次成绩数据转成了列模式,
最终的成绩展示是:用学生信息表的信息关联学生的成绩库,
这才是我想要的效果,
为什么是这样设计的?
因为学生的成绩信息是历年每次考试结束后,导入到系统中的,
当学生毕业时,我们要汇总学生的每次考过的成绩,
此时学生信息与成绩数据库中的学生信息不在是一一对应的了,
因为有的学生已经转学走了,有的退学了,等等

我们只有用最新的学生信息表,关联到成绩数据表,
这样查询出来的成绩是我们想要的

这就涉及到两个关键问题,行转列会产生性能问题,
学生信息表关联行转列的成绩数据时,还会产生性能问题,
如果学生信息表有1万条,成绩数据表中的记录可能就有10几万条,

性能问题直接关系到我能不能用活字格低代码走下去,

所以想求助活字格的专家们,我的这个设计思想有没有别的替代方案,
或者就是无解的问题


回复 使用道具 举报
moer活字格认证
论坛元老   /  发表于:2025-1-25 07:56:48
6#
性能问题直接关系到我能不能用活字格低代码走下去,
---你的这个性能问题跟活字格有毛关系?? 你用原生开发也一样存在这样的问题。

回复 使用道具 举报
Zhangli
金牌服务用户   /  发表于:2025-1-26 14:57:16
8#
感谢您的回复,这两天一直在论坛里查询,希望寻找到一个解决办法,行,我按照您的思路试一下,再次感谢
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2025-1-26 15:29:50
9#
不客气,您那边尝试一下,有问题欢迎您继续跟帖交流~~
回复 使用道具 举报
沐辰
注册会员   /  发表于:5 天前
10#
本帖最后由 沐辰 于 2025-2-11 01:12 编辑

1. 学生表与成绩表 在做关联的时候, 两个表的关联字段都加索引, 用行转列,只关联一次。(表关联是嵌套循环,关联次数越多,扫描成本指数级增长)
2. 按你最终查询的统计格式另外建一张统计表,在写入学生表记录同时,写入统计表学生信息(保持数据一致), 在写入成绩表时,按关联字段、学期 更新统计表的成绩。最后直接查统计表就行(记得按查询条件加索引)秒出结果。

评分

参与人数 1金币 +5 收起 理由
Joe.xu + 5 很给力!

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部