以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 多字段计算 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=80932) |
-- 作者:kaituozhe -- 发布时间:2016/2/13 7:01:00 -- 多字段计算 在统计银行交易数据时,经常需要统计多对多转账交易数据的统计与查询,比如 需要统计 甲乙丙丁四个人对ABCD四个人的交易数据,为此我设计如下代码,但是运行速度非常慢,有没有更好的办法 \'Select Case e.DataCol.Name |
-- 作者:Hyphen -- 发布时间:2016/2/13 8:47:00 -- 常见的作法是另外用一套表来存储多对多的关系。
|
-- 作者:kaituozhe -- 发布时间:2016/2/13 9:10:00 -- Dim v1 As Double Dim v2 As Double Select Case e.DataCol.Name Case "涉及人员","交易户名" If e.DataRow.IsNull("交易户名") = False AndAlso e.DataRow.IsNull("涉及人员") = False Then \'如果工号列不为空 Dim nms1() As String = e.DataRow("交易户名").Split(",") \'将工号列内容拆分成数组 Dim nms2() As String = e.DataRow("涉及人员").Split(",") \'将工号列内容拆分成数组 For Each nm1 As String In nms1 \'遍历参与加工此产品的每个工号 For Each nm2 As String In nms2 \'遍历参与加工此产品的每个工号 v1 = v1 + DataTables("银行明细").sqlCompute("sum(借方金额)","交易户名 = \'"& nm1 & "\'and 对方户名 = \'" & nm2 & "\'") v2 = v2 + DataTables("银行明细").sqlCompute("sum(贷方金额)","交易户名 = \'"& nm1 & "\'and 对方户名 = \'" & nm2 & "\'") Next Next End If e.DataRow("银行交易_借方金额") = v1 e.DataRow("银行交易_贷方金额") = v2 Case "银行交易_借方金额","现金交易_借方金额" e.DataRow("交易合计_借方金额") = e.DataRow("银行交易_借方金额")+e.DataRow("现金交易_借方金额") Case "银行交易_贷方金额","现金交易_贷方金额", e.DataRow("交易合计_贷方金额")=e.DataRow("银行交易_贷方金额")+e.DataRow("现金交易_贷方金额") End Select |
-- 作者:kaituozhe -- 发布时间:2016/2/13 9:11:00 -- 常见的作法是另外用一套表来存储多对多的关系。具体怎么做能介绍的详细些吗?
|
-- 作者:Hyphen -- 发布时间:2016/2/13 9:31:00 -- 比如把"交易户名"和"涉及人员",拆分成一一对应的关系,一个 "交易户名"的工号对应一个"涉及人员"的工号在一行记录中,如果 "交易户名"哟2个工号,"涉及人员"有3个工号,那么就有2X3行记录,这样会有数据冗余,但是统计分析就很方便。 |
-- 作者:kaituozhe -- 发布时间:2016/2/13 10:20:00 -- 这样太多了,比如10个对10个就需要100行,这样太多了,我的意思是是否有更好的办法或者能够优化代码,提高代码效率 |
-- 作者:Hyphen -- 发布时间:2016/2/13 10:51:00 -- 代码效率有时候是基于底层设计的,问题不是在于 100行的数据多不多,而是用空间换时间是否值得,特别是现在存储不值钱的情况下。 |
-- 作者:kaituozhe -- 发布时间:2016/2/13 11:22:00 -- 我需要10对10计算时,先增加100行,再一一列出对应关系然后计算,但需要修改任何一个时就需要修改10个,增加、减少都会非常麻烦,这是多大的工作量呀? |
-- 作者:Hyphen -- 发布时间:2016/2/13 14:17:00 -- 没做过银行系统,所以想象不出来银行交易会有一笔交易是多对多进行的。如果多对多不是在一笔交易内完成的,那么就不存在多对多的关系。个人觉得是不是应该重新梳理一下这个的业务流程。 |
-- 作者:kaituozhe -- 发布时间:2016/2/13 16:16:00 -- 在做数据统计 |