以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何引用临时表的数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=15231)

--  作者:lihe60
--  发布时间:2011/12/17 10:28:00
--  如何引用临时表的数据
 

Dim cmd As New SQLCommand
Dim
dt As DataTable
Dim
cmb As WinForm.ComboBox
cmd.CommandText = "SELECT DISTINCT 客户 From {订单}"
dt = cmd.ExecuteReader()
cmb = e.Form.Controls(
"ComboBox1")
cmb.ComboList= dt.GetComboListString(
"客户"
)

 

 

 

Dim b As New SQLCrossTableBuilder("统计表1",dt)

b.HGroups.AddExp("月", "Month(日期)")

b.VGroups.AddExp("年", "Year(日期)")

b.Totals.AddDef("数量")

b.Totals.AddExp("金额","数量 * 单价") \'

b.Build

MainTable = Tables("统计表1")

 

目的:先生成一个临时表dt,即第一段代码;再对刚才生成的临时表dt进行交叉统计。

问题:第二段代码写不进去。请教。

我的做法:我现在是先用第一段代码生成一个临时表dt,再把这个临时表filler到表A,再用第二段代码对表A进行交叉统计。达到了目的,但太耗时。

要求:必须要sql语句生成一个临时表。

[此贴子已经被作者于2011-12-17 10:32:47编辑过]

--  作者:lihe60
--  发布时间:2011/12/17 10:28:00
--  
因代码写不进去,所以没有附件。
--  作者:mr725
--  发布时间:2011/12/17 13:33:00
--  

直接这样不行吗:

Dim b As New SQLCrossTableBuilder("统计表1","订单")
b.Connection Name = "Sale"

..............

[此贴子已经被作者于2011-12-17 13:33:49编辑过]

--  作者:lihe60
--  发布时间:2011/12/17 14:00:00
--  
以下是引用mr725在2011-12-17 13:33:00的发言:

直接这样不行吗:

Dim b As New SQLCrossTableBuilder("统计表1","订单")
b.Connection Name = "Sale"

..............

[此贴子已经被作者于2011-12-17 13:33:49编辑过]

这样不行的,得不到我要的数据。我要先生成一份清单(如最后一天发货的产品清单或各科目成绩最高的学生花名册)即临时表

[此贴子已经被作者于2011-12-17 14:00:50编辑过]

--  作者:lihe60
--  发布时间:2011/12/17 14:22:00
--  
班级 姓名 语文       数学 政治
一班 张三 6    
二班 李四 6   11
三班 王五   8

 

 

生成如上表,代码如何写
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:最大值.rar

如有其他的方法也可以,即生成每科成绩最高的学生花名册。

要求:外部数据源,也不要加载数据。

[此贴子已经被作者于2011-12-17 14:28:30编辑过]

--  作者:lihe60
--  发布时间:2011/12/17 14:24:00
--  

如有其他的方法也可以,即生成每科成绩最高的学生花名册。

要求:外部数据源,也不要加载数据。

[此贴子已经被作者于2011-12-17 14:27:48编辑过]

--  作者:lihe60
--  发布时间:2011/12/17 14:50:00
--  
Dim b As New SQLCrossTableBuilder("统计表1","数据库")
b.HGroups.AddDef("科目") \'添加客户列用于水平分组
b.HGroups.AddDef("班级") \'添加产品列用于垂直分组,并设置了Pattern参数
b.VGroups.AddDef("姓名") 
b.Totals.AddDef("姓名",AggregateEnum.max,"分数") \'添加数量列用于统计
b.Build \'生成统计表
Tables(e.Form.name & "_table1").datasource= Tables("统计表1") \'打开生成的统计表
这个代码没有反应

--  作者:lihe60
--  发布时间:2011/12/17 15:00:00
--  

Dim b As New SQLCrossTableBuilder("统计表1","数据库")
b.HGroups.AddDef("姓名") \'添加客户列用于水平分组
b.HGroups.AddDef("班级") \'添加产品列用于垂直分组,并设置了Pattern参数
b.VGroups.AddDef("科目") \'添加产品列用于垂直分组,并设置了Pattern参数
\'b.VGroups.AddDef("科目") \'添加产品列用于垂直分组,并设置了Pattern参数
b.Totals.AddDef("分数",AggregateEnum.max,"分数") \'添加数量列用于统计
b.Build \'生成统计表
Tables("" & e.Form.name & "_table1").datasource= Tables("统计表1") \'打开生成的统计表

 

生成如下数据

             数学 语文 政治

李四 二班  5    6      11
王五 三班  8    5       9
张三 一班  2    6       3

我要的数据是这样的

             数学 语文 政治

李四 二班         6      11
王五 三班  8          
张三 一班        6      


--  作者:mr725
--  发布时间:2011/12/17 15:19:00
--  

生成统计表1后:


Dim mx1,mx2,mx3 As Double
mx1 = Tables("统计表1").Compute("Max(分数_1)")
mx2 = Tables("统计表1").Compute("Max(分数_2)")
mx3 = Tables("统计表1").Compute("Max(分数_3)")

For Each r As Row In  Tables("统计表1").Rows
    If r("分数_1") < mx1
        r("分数_1") = Nothing
    End If
    If r("分数_2") < mx2
        r("分数_2") = Nothing
    End If
    If r("分数_3") < mx3
        r("分数_3") = Nothing
    End If
Next


--  作者:lihe60
--  发布时间:2011/12/17 15:30:00
--  

老兄,不能用枚举法的。如果有上千个科目,要举死人的。

还有一个关系的问题,效率要高。

[此贴子已经被作者于2011-12-17 15:43:06编辑过]