Foxtable(狐表)用户栏目专家坐堂 → C版深夜写实例:纵向表如何变成横向表....大家来学习.


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

主题:C版深夜写实例:纵向表如何变成横向表....大家来学习.

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
C版深夜写实例:纵向表如何变成横向表....大家来学习.  发帖心情 Post By:2009/1/12 23:04:00 [只看该作者]

假设有表A,
经过统计后得出统计表A,
表B为固定表,
怎么才能把统计表A的数据写入表B相应的空格,而缺少的项目则自动为0??

表A
  A     2
   A    3
   B    2
   B    4
   D    3
统计表A
  A    5 
   B    6
   D    3

表B
   A B    C    D     E  
                   
[此贴子已经被作者于2009-1-13 8:29:24编辑过]

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/1/13 0:33:00 [只看该作者]

如果这种格式是固定的,可以直接在表B的DataColChanged事件中设置如下代码。

e.DataRow("A") = DataTables("表A").Compute("sum(第二列)","[第一列] = 'A'")+0
e.DataRow("B") = DataTables("表A").Compute("sum(第二列)","[第一列] = 'B'")+0
e.DataRow("C") = DataTables("表A").Compute("sum(第二列)","[第一列] = 'C'")+0
e.DataRow("D") = DataTables("表A").Compute("sum(第二列)","[第一列] = 'D'")+0
e.DataRow("E") = DataTables("表A").Compute("sum(第二列)","[第一列] = 'E'")+0

然后在表B的MainTableChanged事件中设置。
If Maintable.Name = "表B" Then
   DataTables("表B").DataCols("A").RaiseDataColChanged()
End If

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/1/13 0:35:00 [只看该作者]

如果一定要生成统计表,也可以这样,按钮代码:

Dim cmd As New SQLCommand
Dim 统计表A As DataTable
cmd.CommandText = "Select 第一列 , Sum(第二列) AS 第二列 From {表A} Group by 第一列"
统计表A = cmd.ExecuteReader()

Dim dt As Table = Tables("表B")
Dim dt1 As DataTable = DataTables("表A")
Dim ColNames() As String = {"A","B","C","D","E"}
For Each ColName As String In ColNames
    Dim Value As Integer
    Value = dt1.Compute("sum(第二列)","[第一列] = '" & ColName & "'")
    dt.Rows(0)(ColName) = Value
Next


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/1/13 0:40:00 [只看该作者]

要代码短也可以这样:

Dim cmd As New SQLCommand
Dim 统计表A As DataTable
cmd.CommandText = "Select 第一列 , Sum(第二列) AS 第二列 From {表A} Group by 第一列"
统计表A = cmd.ExecuteReader()
Dim ColNames() As String = {"A","B","C","D","E"}
For Each ColName As String In ColNames
    Tables("表B").Rows(0)(ColName) = DataTables("表A").Compute("sum(第二列)","[第一列] = '" & ColName & "'")+0
Next


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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/1/13 8:28:00 [只看该作者]

图片点击可在新窗口打开查看C版必胜,申请加精!!!
谢谢C版,举一反三,问题迎刃而解,收藏做为示例了...图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2009/1/13 9:48:00 [只看该作者]

收藏精典

 回到顶部