以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]表格结构转换  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=34933)

--  作者:yujianbin0535
--  发布时间:2013/6/19 16:29:00
--  [求助]表格结构转换

数据表如下,

 
此主题相关图片如下:1.jpg
按此在新窗口浏览图片

不管用什么方式,怎样才能用上图的数据做出下图的表来?

 
此主题相关图片如下:2.jpg
按此在新窗口浏览图片

 

图2中的表应该是由图1中的数据自动生成的,不是固定格式的数据表。

 

报表也可以啊

 

 数据表附件

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目2.table

[此贴子已经被作者于2013-6-19 18:00:02编辑过]

--  作者:Bin
--  发布时间:2013/6/19 16:31:00
--  
图挂了


图片点击可在新窗口打开查看此主题相关图片如下:上传图片请参考这里.gif
图片点击可在新窗口打开查看


--  作者:yujianbin0535
--  发布时间:2013/6/19 16:45:00
--  
谢谢,这就改
--  作者:Bin
--  发布时间:2013/6/19 16:49:00
--  
你这是什么表? 代码生成的统计表? 还是一般的数据表.  问题描述清楚一点. 才能快速解决问题.
--  作者:狐狸爸爸
--  发布时间:2013/6/19 16:50:00
--  

最好设计好表,输入少量测试数据,然后发上来。

这样可以直接帮你写一下。

 


--  作者:狐狸爸爸
--  发布时间:2013/6/19 17:20:00
--  

大概这样,关键在于通过统计表的列标题获取日期,然后从原始数据表找出对应的行:

 

For Each dr1 As DataRow In DataTables("统计表").DataRows
    Dim nm As String = dr1("姓名")
    For Each dc As DataCol In DataTables("统计表").DataCols
        If dc.name <> "姓名" Then
            Dim dt As Date = CDate(dc.Caption)
            Dim dr2 As DataRow = DataTables("数据表").Find("姓名 = \'" & nm & "\' and 日期 = #" & dt & "#" )
            If dr2 IsNot Nothing Then
                dr1(dc.name) = dr2("考勤")
            End If
        End If
    Next
Next

[此贴子已经被作者于2013-6-19 17:20:21编辑过]

--  作者:ybil
--  发布时间:2013/6/19 18:26:00
--  
Dim v1 As New List(of String)
v1.AddRange(DataTables("表A").GetComboListString("日期","","日期").split("|"))
Dim sql,s1 As String
For n1 As Integer =1 To v1.count
    SQL+=" ,Max(考勤)  As A" &  n1
Next
SQL="Select 姓名" & SQL & "  From{表A}  Group by 姓名"

Dim dtb As New DataTableBuilder("统计")
dtb.Build()

With DataTables("统计")
    .StopRedraw
    .Fill(SQL,True)
    For Each c As Col In Tables("统计").Cols
        If c.Index > 0 Then
            .DataCols(c.name).Caption = Format(Cdate(v1(c.Index -1)),"yyyy-MM-dd")
            .BuildHeader()
        End If
    Next
    
    For Each r As Row In Tables("统计").Rows
        For Each c As Col In Tables("统计").Cols
            If c.Index > 0 Then
                r(c.name) = DataTables("表A").Find("姓名 = \'" & r("姓名") & "\' And 日期 =#" & c.Caption & "#")("考勤")
            End If
        Next
    Next
    MainTable= Tables("统计")
    .ResumeRedraw
End With


--  作者:don
--  发布时间:2013/6/19 19:03:00
--  
Dim sql As String
Dim v1() As String=DataTables("表A").GetComboListString("日期","","日期").split("|")

For n1 As Integer =0 To v1.Length-1
    SQL+=" ,Max(iif(日期 = #" & v1(n1) & "#,考勤,\'\')) As A" & n1
Next
SQL="Select 姓名" & SQL & "  From{表A}  Group by 姓名"

Dim dtb As New DataTableBuilder("统计")
dtb.Build()

Dim t1 As Table = Tables("统计")
t1.StopRedraw
t1.DataTable.Fill(SQL,True)
For n1 As Integer =0 To v1.Length-1
    t1.grid.setData(0,n1+2, Format(Cdate(v1(n1)),"yyyy-MM-dd"))
Next
t1.ResumeRedraw

MainTable= t1
[此贴子已经被作者于2013-6-20 6:53:07编辑过]