Foxtable(狐表)用户栏目专家坐堂 → [求助]增加开始和结束时间列(已解决)


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

主题:[求助]增加开始和结束时间列(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]增加开始和结束时间列(已解决)  发帖心情 Post By:2014/8/1 17:31:00 [只看该作者]

一段代码,按批次进行汇总类别,要求当月汇总表增加"开始时间"和"结束时间"两列,分别显示本批次时间的最小值和最大值,如何实现,请各位老师指教,谢谢。


Dim sql As String
sql = "Select 日期,批次,时间,单位,类别,1 As 计数 FROM {表A}"
Dim b As New CrossTableBuilder("当月汇总",sql)
b.HGroups.AddDef("单位")
b.HGroups.AddDef("批次")
b.VGroups.AddDef("日期",DateGroupEnum.None)
b.VGroups.AddDef("类别")
b.Totals.AddDef("计数")
b.Build()
MainTable = Tables("当月汇总")
Tables("当月汇总").AutoSizeCols()

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb




[此贴子已经被作者于2014-8-2 12:36:59编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/1 17:45:00 [只看该作者]

Dim sql As String
sql = "Select 日期,批次,时间,单位,类别,1 As 计数 FROM {表A}"
Dim b As New CrossTableBuilder("当月汇总",sql)
b.HGroups.AddDef("单位")
b.HGroups.AddDef("批次")
b.VGroups.AddDef("日期",DateGroupEnum.None)
b.VGroups.AddDef("类别")
b.Totals.AddDef("计数")
b.Build()
MainTable = Tables("当月汇总")
Tables("当月汇总").AutoSizeCols()
Dim dt As DataTable = DataTables("当月汇总")
dt.DataCols.Add("开始时间", Gettype(Date))
dt.DataCols.Add("结束时间", Gettype(Date))
dt.DataCols("开始时间").SetDateTimeFormat(DateTimeFormatEnum.DateLongTime)
dt.DataCols("结束时间").SetDateTimeFormat(DateTimeFormatEnum.DateLongTime)
For Each dr As DataRow In dt.DataRows
    Dim fdr1 As DataRow = DataTables("表A").Find("单位 = '" & dr("单位") & "' and 批次 = '" & dr("批次") & "'", "日期,时间")
    Dim fdr2 As DataRow = DataTables("表A").Find("单位 = '" & dr("单位") & "' and 批次 = '" & dr("批次") & "'", "日期 desc,时间 desc")
    dr("开始时间") = cdate(fdr1("日期") & " " & fdr1("时间"))
    dr("结束时间") = cdate(fdr2("日期") & " " & fdr2("时间"))
Next

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/8/1 18:37:00 [只看该作者]

谢谢甜老师的指教,再次衷心感谢!!

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/8/1 19:52:00 [只看该作者]

代码稍作微调,所得效果如下:


图片点击可在新窗口打开查看此主题相关图片如下:捕获.jpg
图片点击可在新窗口打开查看


按钮代码如下:
Dim sql As String
sql = "Select 日期,批次,时间,单位,类别,1 As 计数 FROM {表A}"
Dim b As New CrossTableBuilder("当月汇总",sql)
b.HGroups.AddDef("单位")
b.HGroups.AddDef("批次")
b.VGroups.AddDef("日期",DateGroupEnum.None)
b.VGroups.AddDef("类别")
b.Totals.AddDef("计数")
b.Build()
MainTable = Tables("当月汇总")
Tables("当月汇总").AutoSizeCols()
Dim dt As DataTable = DataTables("当月汇总")
dt.DataCols.Add("开始时间", Gettype(Date))
dt.DataCols.Add("结束时间", Gettype(Date))
dt.DataCols("开始时间").SetDateTimeFormat(DateTimeFormatEnum.LongTime)
dt.DataCols("结束时间").SetDateTimeFormat(DateTimeFormatEnum.LongTime)
For Each dr As DataRow In dt.DataRows
    Dim fdr1 As DataRow = DataTables("表A").Find("单位 = '" & dr("单位") & "' and 批次 = '" & dr("批次") & "'", "时间")
    Dim fdr2 As DataRow = DataTables("表A").Find("单位 = '" & dr("单位") & "' and 批次 = '" & dr("批次") & "'", "时间 desc")
    dr("开始时间") = cdate(fdr1("时间"))
    dr("结束时间") = cdate(fdr2("时间"))
Next
Tables("当月汇总").Cols("开始时间").Move(2)
Tables("当月汇总").Cols("结束时间").Move(3)
Tables("当月汇总").AutoSizeCols()
[此贴子已经被作者于2014-8-1 20:05:28编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/8/1 20:15:00 [只看该作者]

新问题:在每个日期下面增加一列“在册人数”,值为合计,并位于第一列。同时将“出勤”列移到“在册人数”的旁边,即第二列。这样更直观合理。如何实现这样的效果,请各位老师指教,谢谢!!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/8/2 8:53:00 [只看该作者]

顶一下

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


加好友 发短信
等级:狐神 帖子:4650 积分:33912 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2014/8/2 9:01:00 [只看该作者]


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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/8/2 9:16:00 [只看该作者]

不是列宽,是在水平分组列增加一列以及调整水平分组列的位置。
[此贴子已经被作者于2014-8-2 9:18:19编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/8/2 11:50:00 [只看该作者]

解决方法:用union all方法,解决在水平分组列增加“在册人数”列,在类别列的数据,加序号前缀,解决水平分组列的排序问题。



图片点击可在新窗口打开查看此主题相关图片如下:捕获2.jpg
图片点击可在新窗口打开查看


Dim sql As String
sql = "Select 日期,批次,时间,单位,类别,1 As 计数 FROM {表A} union all Select 日期,批次,时间,单位,'0在册人数',1 As 计数 FROM {表A}"
Dim b As New CrossTableBuilder("当月汇总",sql)
b.HGroups.AddDef("单位")
b.HGroups.AddDef("批次")
b.VGroups.AddDef("日期",DateGroupEnum.None)
b.VGroups.AddDef("类别")
b.Totals.AddDef("计数")
b.Build()
MainTable = Tables("当月汇总")
Tables("当月汇总").AutoSizeCols()
Dim dt As DataTable = DataTables("当月汇总")
dt.DataCols.Add("开始时间", Gettype(Date))
dt.DataCols.Add("结束时间", Gettype(Date))
dt.DataCols("开始时间").SetDateTimeFormat(DateTimeFormatEnum.LongTime)
dt.DataCols("结束时间").SetDateTimeFormat(DateTimeFormatEnum.LongTime)
For Each dr As DataRow In dt.DataRows
    Dim fdr1 As DataRow = DataTables("表A").Find("单位 = '" & dr("单位") & "' and 批次 = '" & dr("批次") & "'", "时间")
    Dim fdr2 As DataRow = DataTables("表A").Find("单位 = '" & dr("单位") & "' and 批次 = '" & dr("批次") & "'", "时间 desc")
    dr("开始时间") = cdate(fdr1("时间"))
    dr("结束时间") = cdate(fdr2("时间"))
Next
Tables("当月汇总").Cols("开始时间").Move(2)
Tables("当月汇总").Cols("结束时间").Move(3)
Tables("当月汇总").AutoSizeCols()

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



 回到顶部