以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]分组求和问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=136459)

--  作者:happy_gile
--  发布时间:2019/6/13 18:12:00
--  [求助]分组求和问题
有一个表
流水 支付方式  支付金额
1     微信            1.00
2     支付宝         1.00
3     现金            1.00
4     微信            2.00
5     支付宝         2.00
6     信用卡         1.00
7     微信            3.00
8     信用卡         2.00
9     现金            2.00
想统计每种支付方式的支付金额合计(每种支付方式第一笔交易除外),代码如何写

--  作者:有点甜
--  发布时间:2019/6/13 18:14:00
--  

直接分组统计,然后循环每一行,减去第一次的交易,即可。

 

你需要把统计显示在哪里?是sql语句,还是代码?具体问题做个实例发上来测试。


--  作者:happy_gile
--  发布时间:2019/6/13 18:24:00
--  
直接生成一个临时表就可以,sql 和代码都可以,只要能显示结果就可以(最好能自定义前n笔交易不计算)
[此贴子已经被作者于2019/6/13 18:30:57编辑过]

--  作者:有点甜
--  发布时间:2019/6/13 18:33:00
--  
Dim g As New GroupTableBuilder("统计表1", DataTables("表B"))
g.Groups.AddDef("第一列")
g.Totals.AddDef("第二列")
g.Build()
Dim t = Tables("统计表1")
For Each r As Row In t.Rows
    Dim fdr = DataTables("表B").find("第一列=\'" & r("第一列") & "\'", "_Identify")
    If fdr IsNot Nothing Then
        r("第二列") -= fdr("第二列")
    End If
Next
MainTable = Tables("统计表1")

--  作者:happy_gile
--  发布时间:2019/6/13 18:44:00
--  
想不计算前10笔记录怎么写呢
--  作者:有点甜
--  发布时间:2019/6/13 18:52:00
--  
以下是引用happy_gile在2019/6/13 18:44:00的发言:
想不计算前10笔记录怎么写呢

 

如果是sqlserver数据库,直接用sql语句处理,比较方便,效率也比较高

 

如果写代码,较为繁琐。

 

Dim g As New GroupTableBuilder("统计表1", DataTables("表B"))
g.Groups.AddDef("第一列")
g.Totals.AddDef("第二列")
g.Build()
Dim t = Tables("统计表1")
For Each r As Row In t.Rows
    Dim sum As Double = 0
    Dim drs = DataTables("表B").Select("第一列=\'" & r("第一列") & "\'", "_Identify")
    For i As Integer = 0 To 9
        If drs.count <= i Then
            Exit For
        End If
        sum += drs(i)("第二列")
    Next
    r("第二列") -= sum
   
Next
MainTable = Tables("统计表1")