以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何实现取最小值?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187073)

--  作者:lin98
--  发布时间:2023/6/19 15:50:00
--  如何实现取最小值?
如何实现表A的第一列第行数据对表B的第一列的所有数据行进行相除,如表C的数据将余数(表CT第五列)最小的数据赋值到表A?
注:
1.表A,表B,表C之间都关联字段,如何实现?
2.表A,表B,表C之间如果没有关联字段,就无法实现计算,那就随便加个临时列临时编号进行统计,如何实现?

图片点击可在新窗口打开查看此主题相关图片如下:取最小值.jpg
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2023/6/19 16:00:00
--  
直接遍历2个表就行了

for each ar as row in tables("表A").rows
dim min as integer = 999999
for each br as row in tables("表B").rows
dim a as integer = br("第一列") mod ar("第一列")
min = math.min(min,a)
next
ar("第四列") = min 
next

--  作者:lin98
--  发布时间:2023/6/19 16:27:00
--  
For Each ar As Row In Tables("表A").rows
    Dim min As Integer = 999999
    For Each br As Row In Tables("表B").rows
        Dim a As Integer = br("第一列") Mod ar("第一列")
        min = math.min(min, a)
    Next
    ar("第二列") = br("第一列") / ar("第一列")
    ar("第三列") = ar("第一列") * (br("第一列") / ar("第一列"))
    ar("第四列") = min
    
Next


表A的第二列、第三列没计算,加上红字代码,报错 br未声明,它可能因保持无法访问,如何实现一楼表A的第二列、第三列的值?

--  作者:有点蓝
--  发布时间:2023/6/19 16:40:00
--  
和计算余数的方法完全一样啊,定义多几个变量,在第二个for循环里计算
--  作者:lin98
--  发布时间:2023/6/19 17:26:00
--  
For Each ar As Row In Tables("表A").rows
    Dim min As Integer = 999999
    Dim min2 As Integer = 999999
    Dim min3 As Integer = 999999
    For Each br As Row In Tables("表B").rows
        Dim a As Integer = br("第一列") Mod ar("第一列")
        min = math.min(min, a)
        
        Dim b As Integer = br("第一列") / ar("第一列")
        min2 = math.min(min, b)
        Dim c As Integer = ar("第一列") * (br("第一列") / ar("第一列"))
        min3 = math.min(min, c)
    Next
    ar("第二列") = min2
    ar("第三列") = min3
    ar("第四列") = min
    
Next

计算结果,与一楼表A不一样,如图

图片点击可在新窗口打开查看此主题相关图片如下:最小值-2.jpg
图片点击可在新窗口打开查看




现二表都增加类别,如何实现表A的“第一列,类别列”每行数据对表B的“第一列,类别列”的所有数据行进行相除,计算表A的"第二列、第三列、第四列"的值?如下图


图片点击可在新窗口打开查看此主题相关图片如下:取最小值-3.jpg
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2023/6/19 17:31:00
--  
min2 = math.min(min2 , b)
--  作者:lin98
--  发布时间:2023/6/19 18:03:00
--  
For Each ar As Row In Tables("表A").rows
    Dim min As Integer = 999999
    Dim min2 As Integer = 999999
    Dim min3 As Integer = 999999
    For Each br As Row In Tables("表B").rows
        Dim a As Integer = br("第一列") Mod ar("第一列")
        min = math.min(min, a)
        
        Dim b As Integer = br("第一列") / ar("第一列")
        min2 = math.min(min2, b)
        Dim c As Integer = ar("第一列") * (br("第一列") / ar("第一列"))
        min3 = math.min(min3, c)
    Next
    ar("第二列") = min2
    ar("第三列") = min3
    ar("第四列") = min
    
Next

上面代码执行后如图

图片点击可在新窗口打开查看此主题相关图片如下:取最小-5.jpg
图片点击可在新窗口打开查看

还是无法实现,表A的效果


--  作者:有点蓝
--  发布时间:2023/6/19 19:58:00
--  
只能是自己的计算公式有问题,既然"第三列"="第一列" * "第二列",其实和表B没有什么关系,直接计算就行,没有必要放中间循环了

ar("第三列") = ar("第列") * ar("第列")