以文本方式查看主题

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

--  作者:2
--  发布时间:2015/5/18 11:24:00
--  [求助]如何将表统计成这样的交叉表并汇总呢?

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150526112817.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150526113447.png
图片点击可在新窗口打开查看
如何将表统计成这样的交叉表并汇总呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:加油申请.rar


[此贴子已经被作者于2015/5/18 11:28:54编辑过]

--  作者:大红袍
--  发布时间:2015/5/18 11:26:00
--  

 垂直分组,控制成 日期。

 

 统计那里,稍微处理一下就行了。 日期获取最大值、加油量获取累加值


--  作者:2
--  发布时间:2015/5/18 11:37:00
--  
好像没这个效果啊


--  作者:2
--  发布时间:2015/5/18 11:39:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150526114455.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150526114620.png
图片点击可在新窗口打开查看


--  作者:大红袍
--  发布时间:2015/5/18 12:01:00
--  

代码如下

 

Dim g As New SqlCrossTableBuilder("统计表1", "加油申请表")
g.HGroups.AddDef("车型","车型1_车型")
g.HGroups.AddDef("牌照号", "拍照号_牌照号")
g.VGroups.AddDef("日期", DateGroupEnum.None)
g.Totals.AddDef("日期", AggregateEnum.max, "日期")
g.Totals.AddDef("数量", "数量")
g.HorizontalTotal = True
g.Build()
Dim t As Table = Tables("统计表1")
t.grid.Rows(0).Height = 0
MainTable = t


--  作者:2
--  发布时间:2015/5/18 12:07:00
--  
您厉害!!非常佩服,多谢您!在设置交叉统计表里是怎么设置的呢,能截个图看看吗?
--  作者:大红袍
--  发布时间:2015/5/18 12:20:00
--  

Dim sdt As DataTable = DataTables("加油申请表")
Dim max As Integer = 0
For Each ary() As String In sdt.GetValues("车型|牌照号")
    Dim c As Integer = sdt.Compute("count(车型)", "车型 = \'" & ary(0) & "\' and 牌照号 = \'" & ary(1) & "\'")
    If c > max Then max = c
Next

Dim dtb As New DataTableBuilder("交叉表")
dtb.AddDef("车型", Gettype(String), 32)
dtb.AddDef("牌照号", Gettype(String), 32)
For i As Integer = 1 To max
    dtb.AddDef("日期" & i, Gettype(Date),"","日期")
    dtb.AddDef("数量" & i, Gettype(Double),"","数量")
Next
dtb.Build()

Dim dt As DataTable = DataTables("交叉表")
For Each ary() As String In sdt.GetValues("车型|牌照号")
    Dim idx As Integer = 1
    Dim ndr As DataRow = dt.AddNew
    ndr("车型") = ary(0)
    ndr("牌照号") = ary(1)
    For Each dr As DataRow In sdt.Select("车型 = \'" & ary(0) & "\' and 牌照号 = \'" & ary(1) & "\'")
        ndr("日期" & idx) = dr("日期")
        ndr("数量" & idx) = dr("数量")
        idx += 1
    Next
Next


--  作者:2
--  发布时间:2015/5/18 12:21:00
--  
以下是引用大红袍在2015/5/18 12:01:00的发言:

代码如下

 

Dim g As New SqlCrossTableBuilder("统计表1", "加油申请表")
g.HGroups.AddDef("车型","车型1_车型")
g.HGroups.AddDef("牌照号", "拍照号_牌照号")
g.VGroups.AddDef("日期", DateGroupEnum.None)
g.Totals.AddDef("日期", AggregateEnum.max, "日期")
g.Totals.AddDef("数量", "数量")
g.HorizontalTotal = True
g.Build()
Dim t As Table = Tables("统计表1")
t.grid.Rows(0).Height = 0
MainTable = t


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150526122726.png
图片点击可在新窗口打开查看

统计列的日期列没有(AggregateEnum.max)最大值选项啊

设置后查看到的代码:

Dim g As New CrossTableBuilder("统计表2", DataTables("加油申请表"))

g.HGroups.AddDef("车型", "车型_车型")

g.HGroups.AddDef("牌照号", "牌照号_牌照号")

g.VGroups.AddDef("日期", DateGroupEnum.None)

g.Totals.AddDef("日期", AggregateEnum.Count, "日期")

g.Totals.AddDef("数量", "数量")

g.HorizontalTotal = True

g.Build()

MainTable = Tables("统计表2")



--  作者:大红袍
--  发布时间:2015/5/18 12:27:00
--  

1、看7楼;

 

2、要用sqlCrossTableBuilder


--  作者:2
--  发布时间:2015/5/18 12:37:00
--  
非常谢谢,慢慢来研究吧!