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

QQ登录

只需一步,快速开始

Mycosts

初级会员

25

主题

98

帖子

363

积分

初级会员

积分
363
Mycosts
初级会员   /  发表于:2022-3-31 22:32  /   查看:7526  /  回复:23
5金币

根据上图示意,现需求为:
树状图会分为三个层级,
现要求最低层级,即三级记录的“含税合价”字段,是设定相关公式(数量*单价*系数)进行计算得出数据;
二级的记录,相应的字段求和值,为根据其下级,即三级的所有记录汇总和;
一级的记录,相应的字段求和值,为根据其下级,即二级的所有记录汇总和;
现咨询的是,在表格中 “含税合价”字段,如何设定公式,才能实现上述功能。
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

我遇到跟你一样的问题,说说我用过3种方法: 1.单表法: 把一级、二级.....、7级数据全部保存在一张表中。这种情况是由于数据量不多,只是层级关系复杂,参考“物品-电器-家用电器-厨房电器-需要用水的厨房电器-热水器”分类规则。 通过贴上“层级”的标签,区分各条记录的层级。汇算的话,通过服务端命令,先把第7层上级id相同的数据进行汇总求和,然后再计算第6级,第五级,以此类推。 2.多表法: 把一级数据保存到一张表 ...

23 个回复

倒序浏览
最佳答案
最佳答案
一眼望天涯
高级会员   /  发表于:2022-3-31 22:32:23
来自 8#
本帖最后由 一眼望天涯 于 2022-4-4 18:48 编辑

我遇到跟你一样的问题,说说我用过3种方法:
1.单表法:
把一级、二级.....、7级数据全部保存在一张表中。这种情况是由于数据量不多,只是层级关系复杂,参考“物品-电器-家用电器-厨房电器-需要用水的厨房电器-热水器”分类规则。
通过贴上“层级”的标签,区分各条记录的层级。汇算的话,通过服务端命令,先把第7层上级id相同的数据进行汇总求和,然后再计算第6级,第五级,以此类推。

2.多表法:
把一级数据保存到一张表,二级数据保存到另一张表,3级数据保存在另一张表。这是由于数据量大,单表记录都是几万条,最高20万条,必须拆分,否则影响后面的运算。这样的好处就是不用贴层级标签了,坏处是相关的服务端命令要写三遍,写三遍(因为是操作不同的表)。

3.单表+视图法:
这种保存方式和第一种一样,不同的是把计算过程从服务端命令扔给了数据库,通过大量的join、with、partition、group by来生成需要的统计数据,不用写一行服务端命令就能获取想要的数据。开发速度快,执行效率高。原来服务端命令跑完10万条数据至少需要1小时(因为需要循环遍历、判断、写/更新等),但是交给数据库的话只需要10秒,这还是没什么优化的前提下。缺点是需要你对视图的写法有深刻了解,否则加载个视图就要半分钟,也就没啥用了。

思路给你,觉得好用就选我为最佳答案吧,谢谢~
回复 使用道具 举报
夏雪冬阳
论坛元老   /  发表于:2022-4-1 06:23:23
2#
方法很多,可以用视图汇总一,二级字段,然后将数据加载到表格中
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2022-4-1 15:21:04
3#
感谢各位大佬的支持~
您好,不同的科目存储在同一张表中嘛,如果没有存在于同一张表中的话,是可以给不同级别的表之间设置主子表关联关系,然后使用统计字段统计子表数据。如果是在同一张表中的话,可以创建使用图使用sumif函数去统计的
回复 使用道具 举报
Mycosts
初级会员   /  发表于:2022-4-2 21:05:59
4#
没有明白,具体如何操作
回复 使用道具 举报
Mycosts
初级会员   /  发表于:2022-4-2 22:05:02
5#

现上传示意图 及 工程文件,烦大枷们给予指导,

本帖子中包含更多资源

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

x
回复 使用道具 举报
一眼望天涯
高级会员   /  发表于:2022-4-4 22:30:25
11#
看过demo了,跟我之前写的一模一样。我看你已经写了层级、上级id,如果不想修改表结构,建议选择方法一,写服务端命令,从最下层往上推,层层循环遍历、汇总求和即可。
回复 使用道具 举报
一眼望天涯
高级会员   /  发表于:2022-4-4 22:41:09
12#
服务端命令思路:
1.设置一个空值;
2.获取层级为最底层(假设为7)、所有 上级id等于某个id 的数组,比如23、25、27;
3.对2进行循环遍历;
4.循环开始时,设置总和变量为0(一定是普通变量,比如a,不要自作聪明地设置为item.XXX这种循环内变量,否则后续循环取不到值);
5.去数据库取id=23的、你要计算的值,比如它的数量、单价、系数,乘积汇总,得到一个变量b;
6.把b的值传递给a,写法是变量a=变量a+变量b(参考编程语言的a+=b);
7.循环遍历结束后,变量a就是层级为6、id为指定值的所求值。

这种循环遍历,有几层,就要写几次,方法一模一样。你理解了算法,就能很快写出来,剩下的就是重复+重复了。

但是我要告诉你,这种循环遍历你写完了,会发现一个坑,就是执行效率低。因为要涉及到判定、设置变量、读写等,如果数据量不超过5000条还好,太多了的话,这种遍历就是执行地狱。可能你上一个循环还没结束,下一个循环就要开始了。

数据量大的话,请考虑外联库的视图,需要了解group、partition、with的用法,或者直接搜窗口函数、临时函数,这就是专门为了解决你这个问题而存在的。
数据库的计算时间大概是服务端命令执行时间的百分之一、千分之一。

@lh123
回复 使用道具 举报
一眼望天涯
高级会员   /  发表于:2022-4-4 22:41:37
13#
lh123 发表于 2022-4-4 22:20
用sumif直接在表上使用。

请参考~
回复 使用道具 举报
一眼望天涯
高级会员   /  发表于:2022-4-4 23:41:47
15#
lh123 发表于 2022-4-4 23:39
收你30金币。就可以下载附件了。如果嫌贵,RMB500也可以的。

不贵不贵,不管能否解决问题,都感谢回答~
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部