以文本方式查看主题

-  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=5546)

--  作者:lihe60
--  发布时间:2009/12/18 12:15:00
--  后台统计
请教如何根据表A的数据,从后台取数,生成表B样式的统计表?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:czy
--  发布时间:2009/12/18 14:13:00
--  
看不懂。
--  作者:lihe60
--  发布时间:2009/12/18 14:41:00
--  
我就从前台取数吧。
--  作者:xl
--  发布时间:2009/12/18 15:00:00
--  
你说的是行列互换吧?阿翔有一个设计:


班级 语文 数学 英语
王文海 刘某 刘大
刘海明 密码 立法
施亚明 大道 方法


转换以后就是

科目
语文 王文海 刘海明 施亚明
数学 刘某 密码 大道
英语 刘大 立法 方法


        Dim dtb As New DataTableBuilder("ls")
        dtb.AddDef("科目", GetType(String), 255)
        For i As Integer = 0 To Tables("表A").Count - 1
            Dim lm As String = Tables("表A").Value(i, 0)
            dtb.AddDef(lm, GetType(String), 255)
        Next
        dtb.Build()
        Tables("ls").Rows.AddNew(Tables("表A").Cols.Count - 1)

        For j As Integer = 0 To Tables("表A").Cols.Count - 2
            Tables("ls").Value(j, 0) = Tables("表A").Cols(j + 1).Name
        Next

        For p As Integer = 1 To Tables("表A").Cols.Count - 1
            For q As Integer = 1 To Tables("表A").Rows.Count
                Tables("ls").Value(p - 1, q) = Tables("表A").Value(q - 1, p)
            Next
        Next


--  作者:czy
--  发布时间:2009/12/18 15:37:00
--  
这种框架统计效率太低了吧?

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("姓名", GetType(String),10)
Dim Kms As List(Of String) = DataTables("表A").GetUniqueValues("[科目] Is Not Null", "科目")
For Each Km As String In Kms
    dtb.AddDef(Km, GetType(Integer))
Next
dtb.Build()
Dim Names As List(Of String) = DataTables("表A").GetUniqueValues("[姓名] Is Not Null", "姓名")
For Each Name As String In Names
    Dim dr As DataRow = DataTables("统计").AddNew()
    dr("姓名") = Name
Next
For Each Km As String In Kms
    For Each dr As DataRow In DataTables("统计").DataRows
        dr(Km) = DataTables("表A").Compute("Sum(金额)","[姓名] = \'" & dr("姓名") & "\' And [科目] = \'" & Km & "\'")
    Next
Next
MainTable = Tables("统计")

--  作者:czy
--  发布时间:2009/12/18 15:41:00
--  
楼上是前台统计,如果要从后台统计最好从用SQLCommand生成一个临时表,然后从临时表中进行统计.
--  作者:czy
--  发布时间:2009/12/18 15:43:00
--  
以下是引用xl在2009-12-18 15:00:00的发言:
你说的是行列互换吧?阿翔有一个设计:


班级 语文 数学 英语
王文海 刘某 刘大
刘海明 密码 立法
施亚明 大道 方法


转换以后就是

科目
语文 王文海 刘海明 施亚明
数学 刘某 密码 大道
英语 刘大 立法 方法


        Dim dtb As New DataTableBuilder("ls")
        dtb.AddDef("科目", GetType(String), 255)
        For i As Integer = 0 To Tables("表A").Count - 1
            Dim lm As String = Tables("表A").Value(i, 0)
            dtb.AddDef(lm, GetType(String), 255)
        Next
        dtb.Build()
        Tables("ls").Rows.AddNew(Tables("表A").Cols.Count - 1)

        For j As Integer = 0 To Tables("表A").Cols.Count - 2
            Tables("ls").Value(j, 0) = Tables("表A").Cols(j + 1).Name
        Next

        For p As Integer = 1 To Tables("表A").Cols.Count - 1
            For q As Integer = 1 To Tables("表A").Rows.Count
                Tables("ls").Value(p - 1, q) = Tables("表A").Value(q - 1, p)
            Next
        Next


这个代码应该有问题吧?
假设班级有重复内容,有空行,好象会出错的(没测试,只是凭感觉)。

[此贴子已经被作者于2009-12-18 15:45:28编辑过]

--  作者:lihe60
--  发布时间:2009/12/18 16:12:00
--  
以下是引用czy在2009-12-18 15:41:00的发言:
楼上是前台统计,如果要从后台统计最好从用SQLCommand生成一个临时表,然后从临时表中进行统计.

先生成一个临时表,再统计,这又成了在前台统计。


--  作者:lihe60
--  发布时间:2009/12/18 16:13:00
--  
以下是引用czy在2009-12-18 15:41:00的发言:
楼上是前台统计,如果要从后台统计最好从用SQLCommand生成一个临时表,然后从临时表中进行统计.

我说的不是互换,是从后面直接统计。


--  作者:czy
--  发布时间:2009/12/18 16:38:00
--  
以下是引用lihe60在2009-12-18 16:13:00的发言:

我说的不是互换,是从后面直接统计。

除非先做好统计表的框架否则很难达到吧。