Foxtable(狐表)用户栏目专家坐堂 → 后台统计


  共有15003人关注过本帖树形打印复制链接

主题:后台统计

帅哥哟,离线,有人找我吗?
czy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/18 14:13:00 [显示全部帖子]

看不懂。

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/18 15:41:00 [显示全部帖子]

楼上是前台统计,如果要从后台统计最好从用SQLCommand生成一个临时表,然后从临时表中进行统计.

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/18 16:38:00 [显示全部帖子]

以下是引用lihe60在2009-12-18 16:13:00的发言:

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
czy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/18 16:39:00 [显示全部帖子]

以下是引用lihe60在2009-12-18 16:12:00的发言:

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


SQLCommand的ExecuteReader是看不到临时表的。


 回到顶部
帅哥哟,离线,有人找我吗?
czy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33951 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/19 12:07:00 [显示全部帖子]

Dim g As New CrossTableBuilder("统计", DataTables("表A"), "[姓名] Is Not  Null ")
g.HGroups.AddDef("姓名")
g.VGroups.AddDef("科目")
g.Totals.AddDef("金额", "金额")
g.Filter = "[姓名] Is Not  Null "
g.FromServer = True
g.Build()
MainTable = Tables("统计")

 回到顶部