找回密码
 立即注册

QQ登录

只需一步,快速开始

seenal

金牌服务用户

21

主题

74

帖子

249

积分

金牌服务用户

积分
249

[已处理] 表格处理问题

seenal
金牌服务用户   /  发表于:2022-5-10 01:24  /   查看:2252  /  回复:5
100金币
本帖最后由 seenal 于 2022-5-10 01:27 编辑

有这么一个原始表,有:客户编码、总账科目、客户余额、3月、6月、9月、12月、大于12月等8列。

要求输出一个表格,以客户编码为分组,输出:客户编码、余额、3月、6月、9月、12月、大于12月等7列。
首先输出的表格要求以客户编码为分组,只显示余额合计数为正数的行。这个比较简单,设一个sum(客户余额)的统计字段并表格查询条件为统计字段>0即可解决。
但输出表格的3月、6月、9月、12月、大于12月等五列要求比较特别,要求是原始表中相应客户下3月、6月、9月、12月、大于12月五列下1122010100、1122010200、1122020100、1122020200四个科目分别的合计数,再从最右“12月以上”列开始,从右向左,加上此客户下2203010000、2203020000两个科目合计数(是个负数),如果结果<0,那么此列就取0,余数再向左接着加,直到某一列最终为正数为止。
举个例子:原始表中有个客户10000000,1122010100、1122010200、1122020100、1122020200四个科目下分别有10000000的余额和分别为2000000的5列。2203010000、2203020000两个科目下各有-15000000的余额。
那么要求输出的表格是如下效果:

逻辑实在是有点拗口,不知道说明白了没有。不知道这种复杂逻辑能实现么......



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

最佳答案

查看完整内容

您好,仔细看了一下您的逻辑,实现这个计算效果有两种思路: 1.通过视图来处理,比较简洁,但是这个逻辑比较复杂,如果不太擅长写视图可能需要求助别的大佬; 2.使用服务端命令来计算:这个最终数据不好直接在原表上呈现,所以可以新建一个辅助表,专门用于存储计算后的结果以及最终呈现。 使用SQL命令,利用DISTINCT语句查出所有不重复的客户编码 SQL SELECT DISTINCT 语句 (w3school.com.cn) 查询出的结果是这样的,这是 ...

5 个回复

倒序浏览
最佳答案
最佳答案
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-5-10 01:24:20
来自 2#
您好,仔细看了一下您的逻辑,实现这个计算效果有两种思路:
1.通过视图来处理,比较简洁,但是这个逻辑比较复杂,如果不太擅长写视图可能需要求助别的大佬;
2.使用服务端命令来计算:这个最终数据不好直接在原表上呈现,所以可以新建一个辅助表,专门用于存储计算后的结果以及最终呈现。
使用SQL命令,利用DISTINCT语句查出所有不重复的客户编码
SQL SELECT DISTINCT 语句 (w3school.com.cn)

查询出的结果是这样的,这是一个json数组,可以被循环命令循环:
JSON 数组 | 菜鸟教程 (runoob.com)
循环命令 - 活字格V7帮助手册 - 葡萄城产品文档中心 (grapecity.com.cn)

循环命令中使用设置变量命令可以通过.客户编码可以取到当前循环项的客户编码的值,这样可以也可以取到统计字段的值,即为统计所有客户编码=当前循环值的客户余额的和

同时也可以获得所有客户编码=当前循环值,且满足条件的记录
要求是原始表中相应客户下3月、6月、9月、12月、大于12月五列下1122010100、1122010200、1122020100、1122020200四个科目分别的合计数


然后可以使用设置变量命令对已经获取到的数据按照您的业务逻辑进行计算和处理,取值方式和上面取编码相同,使用.就可以;
计算后的结果可以使用数据表操作,更新到辅助表当中。

本帖子中包含更多资源

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

x
回复 使用道具 举报
seenal
金牌服务用户   /  发表于:2022-5-10 16:38:17
3#
Chelsey.Wang 发表于 2022-5-10 11:27
您好,仔细看了一下您的逻辑,实现这个计算效果有两种思路:
1.通过视图来处理,比较简洁,但是这个逻辑比 ...

多谢大佬,用视图的话这个逻辑问了个大佬,大佬也头大... 用服务端循环命令的话,这个思路我看懂了,我觉着理论是可行的,但实际可能会卡......
但我之前搞过一个添加序列号的服务端命令,就一个参数,查询数据库里是否有和要添加的序列号一样的序列号,有的话查询行数为循环次数,所有大于等于预添加序列号的序列号全部+1。就这么个简单的命令,不到2000行数据的时候,执行起来需要卡小1分钟,挺影响用户体验的。就是我们集团用的致远A8,里面也有类似这么个机制,一个单位300多人,序列号有重复的时候也要卡几秒,这还是双大型机负载均衡的情况下,估计也是用的循环命令。所以这块我想想看能不能再简化一下思路吧,哪怕分开展示呢....
回复 使用道具 举报
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-5-10 17:25:15
4#
seenal 发表于 2022-5-10 16:38
多谢大佬,用视图的话这个逻辑问了个大佬,大佬也头大... 用服务端循环命令的话,这个思路我看懂了,我觉 ...

这个逻辑是比较复杂,如果要全部计算出来然后再呈现在表格中的确需要花费一些时间,一起呈现主要问题在于余额和月份都需要聚合统计,但是聚合的维度不一样,一共有三种。

如果写视图的话,我的思路是这样的:
视图列包括:编码列、根据编码SUM四个正数科目的值作为一列、根据编码SUM两个负数科目的值作为一列、根据编码SUM余额的值作为一列。
剩下所有的逻辑计算应该都是可以在前端完成的,这样服务端的计算压力也会小一些。如果在表格中,可以借助EXCEL公式来计算,结合隐藏列记录余额;也可以考虑使用图文列表呈现。
回复 使用道具 举报
seenal
金牌服务用户   /  发表于:2022-5-10 17:41:59
5#
Chelsey.Wang 发表于 2022-5-10 17:25
这个逻辑是比较复杂,如果要全部计算出来然后再呈现在表格中的确需要花费一些时间,一起呈现主要问题在于 ...

多谢大佬
回复 使用道具 举报
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-5-10 17:57:16
6#

不客气,有问题欢迎继续发帖交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部