以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]增加开始和结束时间列(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=54665)

--  作者:yyzlxc
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间: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
--  发布时间:2014/8/1 18:37:00
--  
谢谢甜老师的指教,再次衷心感谢!!
--  作者:yyzlxc
--  发布时间: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
--  发布时间:2014/8/1 20:15:00
--  
新问题:在每个日期下面增加一列“在册人数”,值为合计,并位于第一列。同时将“出勤”列移到“在册人数”的旁边,即第二列。这样更直观合理。如何实现这样的效果,请各位老师指教,谢谢!!

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



--  作者:yyzlxc
--  发布时间:2014/8/2 8:53:00
--  
顶一下
--  作者:y2287958
--  发布时间:2014/8/2 9:01:00
--  
说的这个?
--  作者:yyzlxc
--  发布时间:2014/8/2 9:16:00
--  
不是列宽,是在水平分组列增加一列以及调整水平分组列的位置。
[此贴子已经被作者于2014-8-2 9:18:19编辑过]

--  作者:yyzlxc
--  发布时间: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