以文本方式查看主题

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

--  作者:susu312
--  发布时间:2018/9/28 21:31:00
--  交叉统计中垂直分组列选择中,同一个字段选了两次


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

 

foxtable的垂直分组同一个字段选了2次,生成统计表时不会报错,但是我自己实现的简易交叉统计就有这样的问题,

 

\'\'定义数据三个统计1\\2\\3的数据字典,便于引用显示值
Dim dmp1 = Tables("统计1").cols("分组列").DataMap
Dim dmp2 = Tables("统计2").cols("分组列").DataMap
Dim b As New SQLCrossTableBuilder("统计表1","person")
\'\'数据库指定
b.C
\'\'设置水平分组
Dim count1 As Integer = 0
For Each r As Row In Tables("统计1").Rows
   If r.IsNull("分组列")=False Then
        If r.IsNull("日期分组")=False Then
            b.HGroups.AddDef(r("分组列"), DateGroupEnum.Year,  r("标题") )
        Else
            b.HGroups.AddDef(r("分组列"),r("标题") )\'添加列用于水平分组
        End If
   Else
       count1 = count1 +1
       Continue For
   End If
Next
\'\'判断是否没有选择水平分组列
If count1= 0 OrElse count1 = Tables("统计1").Rows.Count Then
     MessageBox.Show("请选择水平分组列", "提示", MessageBoxButtons.ok, MessageBoxIcon.Information)
     Return
End If

\'\'设置垂直分组 count判断的是为空的列
Dim count As Integer = 0
For Each r As Row In Tables("统计2").Rows
     If r.IsNull("分组列")=False Then
        count=count+1
     End If
Next

\'\'判断是否没有选择垂直分组列
If count = 0 OrElse count = Tables("统计2").Rows.Count Then
     MessageBox.Show("请选择垂直分组列", "提示", MessageBoxButtons.ok, MessageBoxIcon.Information)
     Return
End If
\'\'如果只有一组垂直分组列,就给加模式
If count=1 Then
   For Each r As Row In Tables("统计2").Rows
     If r.IsNull("分组列") =False  AndAlso  r.IsNull("日期分组") Then
        r("模式") =dmp2( r("分组列")) & "_{0}"
        b.VGroups.AddDef(r("分组列"), r("模式"))
        Exit For
     End If
   Next

Else
   For Each r As Row In Tables("统计2").Rows
     If r.IsNull("分组列")=False Then
            If  r.IsNull("模式")=False  Then
                 b.VGroups.AddDef( r("分组列"), r("模式"))
            Else
                 b.VGroups.AddDef(r("分组列"))   \'添加列用于垂直分组
            End If
     End If
   Next
End If
\'

\'\'设置统计
\'\'避免用户跳过几行开始输入的问题
For Each r As Row In Tables("统计2").Rows
    If r.IsNull("分组列") =False Then
        b.Totals.AddDef(r("分组列"), AggregateEnum.Count) \'添加列用于统计
         Exit For
   End If
Next

\'\'设置统计选项
If e.Form.Controls("CheckBox1").Checked = True Then   \'水平方向生成汇总
    b.HorizontalTotal = True
End If
If e.Form.Controls("CheckBox2").Checked = True Then   \'垂直方向生成汇总
    b.VerticalTotal = True
End If

 

 

这是为啥呀,上面是我的代码


--  作者:有点蓝
--  发布时间:2018/9/28 21:53:00
--  
SQLCrossTableBuilder不能使用重复的分组列,因为后台数据库不允许。CrossTableBuilder可以有,但是也没有什么实际意义。

如果要使用,要加个别名,就是上面的模式

--  作者:susu312
--  发布时间:2018/9/28 22:08:00
--  
以下是引用有点蓝在2018/9/28 21:53:00的发言:
SQLCrossTableBuilder不能使用重复的分组列,因为后台数据库不允许。CrossTableBuilder可以有,但是也没有什么实际意义。

如果要使用,要加个别名,就是上面的模

老师,我有三个问题:

 

1、对于分组列有2个或者2个以上 ,模式是不是也么有什么实际意义了,,比如两个字段为:性别,学历,那么 表头性别直接划分为男和女了,

2、帮助上说,SQLCrossTableBuilder更专业,可以组合多个关联表,我想问我一个是实时库表, 一个是历史库表,可以同时在这两个表里统计么,用户可以选择实时库,历史库,实时+历史?

3、假如垂直分组列为年龄,那么表头那里就把库里所有的年龄列出来,这样不切合实际,我如何在交叉统计里面 ,让表头变为ie60-70  70-80 80-90这样的段


--  作者:有点蓝
--  发布时间:2018/9/28 22:29:00
--  
参考:http://www.foxtable.com/webhelp/scr/2320.htm


--  作者:susu312
--  发布时间:2018/9/28 22:37:00
--  
以下是引用有点蓝在2018/9/28 22:29:00的发言:
参考:http://www.foxtable.com/webhelp/scr/2320.htm

老师,union方法我知道 ,我想问sql交叉统计可以在两个表里面统计么?


--  作者:有点蓝
--  发布时间:2018/9/28 22:58:00
--  
本来就可以的:http://www.foxtable.com/webhelp/scr/1627.htm
--  作者:susu312
--  发布时间:2018/9/28 23:06:00
--  
以下是引用有点蓝在2018/9/28 22:58:00的发言:
本来就可以的:http://www.foxtable.com/webhelp/scr/1627.htm

我要统计的这两个表没有关联,一个实时库,一个历史库,可以说表字段是完全一样的,但就是把当前数据放在实时库,死亡数据放在历史库,这个怕是不行吧?


--  作者:有点蓝
--  发布时间:2018/9/29 9:00:00
--  

AddTable(Table1,Col1,Table2,Col2)

Table1:基表,或者已经添加的数据表,称之为左表。
Col1:  Table1通过此列和Table2关联。
Table2:要添加的统计表,称之为右边。  
Col2:  Table2通过此列和Table1关联。

 

提示:


1、Table1(左表)和Table2(右表)并非一定要事先建立关联,只需两者的数据可以通过指定的列关联起来即可。
3、如果两个表存在一对多的父子关系,那么建议将多方(子表)作为左表,一方(父表)作为右表。
3、参与统计的表可以是未加载的数据表,只要数据源存在此表即可。


实时库建一个视图,指向历史库的表


建议直接使用视图先把2个库的表需要做统计的数据合并为查询表,然后直接使用