以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据合并  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148038)

--  作者:透明人生
--  发布时间:2020/3/30 0:19:00
--  数据合并
左边四列是表A,如何动态生成右边的表。(可以一次性解决吗:如果同位置有字符在,合并在同一位置,如果同位置是数值,直接相加。)

第一列 第二列 第三列 第四列 第一列 第二列 第四列
a 1 q 公司1 a 1 公司1
a 2 a 2 单位1
a 3 q 公司2 a 3 公司2
a 4 a 4 单位2
a 5 q 公司3 a 5 公司3
a 1
a 2 w 单位1
a 3
a 4 w 单位2
a 5


[此贴子已经被作者于2020/3/30 0:23:38编辑过]

--  作者:有点蓝
--  发布时间:2020/3/30 8:54:00
--  
For Each dr1 As DataRow In DataTables("表A").datarows
Dim dr2 As DataRow = DataTables("表B").find("第一列=\'" & dr1("第一") & "\' and 第二列=\'" & dr1("") & "\'")
if dr2 is nothing then
    dr2 = DataTables("表B").AddNew()
    
dr2("") = dr1("")
else
dr2("") = dr2("") + dr1("")
end if
Next

--  作者:透明人生
--  发布时间:2020/3/30 22:02:00
--  
按原来的代码不行,现改为以下代码,但还要把班级课程表中相同的节序合并成一行,每天的课程随着节序的合并而合并,应该再加哪个代码?

图片点击可在新窗口打开查看此主题相关图片如下:原个人课程表.png
图片点击可在新窗口打开查看



图片点击可在新窗口打开查看此主题相关图片如下:动态合并成班级课程表.png
图片点击可在新窗口打开查看


Dim b As New SQLGroupTableBuilder("课程表","中心表一")
b.C
b.FIlter = DataTables("中心表一").loadFIlter
If Tables("中心表一").FIlter > "" Then
    b.FIlter = IIF(b.FIlter > "", b.FIlter & " and ","") & Tables("中心表一").FIlter
End If
b.Groups.AddDef("学校")
b.Groups.AddDef("年级")
b.Groups.AddDef("班级")  
b.Groups.AddDef("节序")
b.Groups.AddDef("星期_一")
b.Groups.AddDef("星期_二")
b.Groups.AddDef("星期_三")
b.Groups.AddDef("星期_四")
b.Groups.AddDef("星期_五")
b.build()
For Each dr1 As DataRow In DataTables("中心表一").DataRows
Dim dr2 As DataRow = DataTables("课程表").find("学校=\'" & dr1("学校") & "\' and 年级=\'" & dr1("年级") & "\' and 班级=\'" & dr1("班级") & "\'and 节序=\'" & dr1("节序") & "\'")
If dr2 Is Nothing Then
    dr2 = DataTables("课程表").AddNew()
   dr2("星期_一") = dr2("星期_一") + dr1("星期_一")
dr2("星期_二") = dr1("星期_二") + dr2("星期_二")
dr2("星期_三") = dr1("星期_三") + dr2("星期_三")
dr2("星期_四") = dr1("星期_四") + dr2("星期_四")
dr2("星期_五") = dr1("星期_五") + dr2("星期_五")
End If
Next
MainTable = Tables("课程表")

--  作者:有点蓝
--  发布时间:2020/3/30 22:20:00
--  
For Each dr1 As DataRow In DataTables("中心表一").DataRows
    Dim dr2 As DataRow = DataTables("课程表").find("学校=\'" & dr1("学校") & "\' and 年级=\'" & dr1("年级") & "\' and 班级=\'" & dr1("班级") & "\'and 节序=\'" & dr1("节序") & "\'")
    If dr2 Is Nothing Then
        dr2 = DataTables("课程表").AddNew()
    End If
    dr2("星期_一") = dr2("星期_一") + dr1("星期_一")
    dr2("星期_二") = dr1("星期_二") + dr2("星期_二")
    dr2("星期_三") = dr1("星期_三") + dr2("星期_三")
    dr2("星期_四") = dr1("星期_四") + dr2("星期_四")
    dr2("星期_五") = dr1("星期_五") + dr2("星期_五")
Next

--  作者:透明人生
--  发布时间:2020/3/30 22:27:00
--  
还不行,节序中还是有是相同的,如:上午第1节、第2节等还是两行。

图片点击可在新窗口打开查看此主题相关图片如下:合并后.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2020/3/30 22:32:00
--  
分组的时候就重复了吧!或者数据有问题
--  作者:透明人生
--  发布时间:2020/3/30 22:38:00
--  
第3楼中的代码,节序就重复,就是想把两行相同的节序合并为一行,后面每天的课程也合并为一行。
--  作者:有点蓝
--  发布时间:2020/3/30 22:45:00
--  
请上传实例测试
--  作者:透明人生
--  发布时间:2020/3/30 23:39:00
--  
谢谢!
[此贴子已经被作者于2020/3/31 22:23:33编辑过]

--  作者:有点蓝
--  发布时间:2020/3/31 8:58:00
--  
分组本身就已经重复了

Dim b As New SQLGroupTableBuilder("课程表","灵川中心表一")
b.C
b.FIlter = DataTables("灵川中心表一").loadFIlter
If Tables("灵川中心表一").FIlter > "" Then
    b.FIlter = IIF(b.FIlter > "", b.FIlter & " and ","") & Tables("灵川中心表一").FIlter
End If
b.Groups.AddDef("学校")
b.Groups.AddDef("年级")
b.Groups.AddDef("班级")
b.Groups.AddDef("节序")
b.build()
MainTable = Tables("课程表")
Dim sr() As String = {"一","二","三","四","五"}
For Each s As String In sr
    DataTables("课程表").DataCols.Add("星期_" & s,Gettype(String),16)
Next

For Each dr1 As DataRow In DataTables("灵川中心表一").DataRows
    Dim dr2 As DataRow = DataTables("课程表").find("学校=\'" & dr1("学校") & "\' and 年级=\'" & dr1("年级") & "\' and 班级=\'" & dr1("班级") & "\'and 节序=\'" & dr1("节序") & "\'")
    If dr2 Is Nothing Then
        dr2 = DataTables("课程表").AddNew()
    End If
    dr2("星期_一") = dr2("星期_一") + dr1("星期_一")
    dr2("星期_二") = dr1("星期_二") + dr2("星期_二")
    dr2("星期_三") = dr1("星期_三") + dr2("星期_三")
    dr2("星期_四") = dr1("星期_四") + dr2("星期_四")
    dr2("星期_五") = dr1("星期_五") + dr2("星期_五")
Next