Foxtable(狐表)用户栏目专家坐堂 → [求助]有条件地汇总数据


  共有86人关注过本帖树形打印复制链接

主题:[求助]有条件地汇总数据

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2312 积分:18993 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]有条件地汇总数据  发帖心情 Post By:2025/4/10 14:20:00 [只看该作者]

帮助里综合使用SQL语句和统计工具提到
Dim sql As String = "Se**lect 产品名称,数量,日期 FROM {订单} INNER JOIN {产品} ON {订单}.产品ID = {产品}.产品ID"

Dim b As New CrossTableBuilder("统计表1",sql, "Sale")
b
.HGroups.AddDef("产品名称")
b
.VGroups.AddDef("日期","{0}月")
b
.Totals.AddDef("数量")
b
.HorizontalTotal = True
b
.VerticalTotal = True
b
.Build()
MainTable
= Tables("统计表1")

这样直接使用SQL可以避免数据量超大的时候系统崩溃

问题:如果我现在只想查某几种选定的产品,如产品ID=1,2,3,4或者有限的几个(但不排除可能会比较多)的汇总结果

如果用in,或者exist,数据量很大的时候,效率估计也不高。

如果建一个临时表X保存选定的产品ID,行分别=1,2,3,4
然后用产品表、订单表、临时表关联查询,应当也可以

这个该怎么整呢?


或者不显示生成的表?
Dim b As New GroupTableBuilder("统计表1",DataTables("订单"))
Dim 
t As DataTable
Dim 
s As Double
b
.Groups.AddDef("产品")
b.Totals.AddDef(
"数量")
t = b.Build(
True'生成一个DataTable
[此贴子已经被作者于2025/4/10 14:24:36编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113351 积分:577220 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/10 14:34:00 [只看该作者]

如果是指在Foxtable临时生成的表,效率还不如使用in。

in除非是大量的数据,比如几十上百个,否则效率也不会太差。

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2312 积分:18993 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2025/4/10 14:37:00 [只看该作者]

现在的一个应用场景,就是in的节点数很多(上千都有可能)
比如选择一个工程的分解结构(目前所知,可能会有3万个左右),它下级的各处层级节点数可能会超多(比如1000个),所以,要查出这1000个节点相关的物料需用数据(可能会达到几千),然后再分物料汇总

有什么好的办法去解决它呢
工程结构分解包括:ID,父ID
物料用料表包括:ID、工程结构ID(只有末级)、物料ID、物料用量

表结构简单,但数据量比较大。
比如选定了某一个节点的工程结构,它直系的所有下级节点(可能几百个)的物料都要参与汇总
[此贴子已经被作者于2025/4/10 14:41:34编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113351 积分:577220 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/10 14:40:00 [只看该作者]

这种考虑使用存储过程,把所有编号合成一个字符串,到存储过程再使用临时表进行关联查询

数据库的临时表可以,Foxtable的临时表没有什么用

 回到顶部