以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  整数列排序问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169508)

--  作者:happyft
--  发布时间:2021/6/18 16:22:00
--  整数列排序问题

图片点击可在新窗口打开查看此主题相关图片如下:排序.jpg
图片点击可在新窗口打开查看
统计表中第一列机台为整数列,现在的问题是排序是按1,10...19,才到2,20,21...
除了改成字符型将1变成001,002这样的方式外有没有办法直接按1,2,3,....9,10,11这样的顺序排,
谢谢!

--  作者:有点蓝
--  发布时间:2021/6/18 16:27:00
--  
肯定不是整数列
--  作者:HappyFt
--  发布时间:2021/6/18 17:19:00
--  
意思是整数列不会那样吗?用了 CAST(b.F2710 AS INT) AS 机台  还是一样
--  作者:有点蓝
--  发布时间:2021/6/18 17:24:00
--  
整数列肯定是按数值大小排序的。
--  作者:HappyFt
--  发布时间:2021/6/19 9:43:00
--  
sql后台表的数据类型是numeric应该没问题吧?
后台数据提取后用了交叉统计
\'---交叉汇总数据
Dim tbl As Table = Tables(e.Form.name & "_主表")
Dim b As New CrossTableBuilder("统计表1",dt)
b.ConnectionName = Mydata
b.HGroups.AddDef("机台") \'添加客户列用于水平分组
b.HGroups.AddDef("产品编码") \'添加客户列用于水平分组
b.HGroups.AddDef("品名") \'添加客户列用于水平分组
b.HGroups.AddDef("规格") \'添加客户列用于水平分组
b.HGroups.AddDef("标准产能") \'添加客户列用于水平分组
b.HGroups.AddDef("生产车间") \'添加客户列用于水平分组

b.VGroups.AddDef("生产日期",DateGroupEnum.Year,"{0}年") \'添加产品列用于垂直分组,并设置了Pattern参数
b.VGroups.AddDef("生产日期",DateGroupEnum.Month,"{0}月") \'添加产品列用于垂直分组,并设置了Pattern参数
b.VGroups.AddDef("生产日期",DateGroupEnum.Day,"{0}日") \'添加产品列用于垂直分组,并设置了Pattern参数
b.Totals.AddDef("生产数量") \'添加数量列用于统计
b.HorizontalTotal = True \'水平方向自动汇总
b.VerticalTotal = True \'垂直方向自动汇总
\'  b.Build \'生成统计表
e.Form.StopRedraw
tbl.StopRedraw
tbl.DataSource = b.BuildDataSource
tbl.AutoSizeCols  \'自动列宽
tbl.Cols("产品编码").Width = 100  \'指定某列宽
tbl.Cols("品名").Width = 100  \'指定某列宽
tbl.Cols("规格").Width = 100  \'指定某列宽
tbl.Sort = "机台"
tbl.ResumeRedraw
e.Form.ResumeRedraw

但结果就是没按顺序排


--  作者:有点蓝
--  发布时间:2021/6/19 10:40:00
--  
使用命令窗口测试b.Build,然后打开表结构看看就知道了AddExp

试试使用SQLCrossTableBuilder


--  作者:HappyFt
--  发布时间:2021/6/19 15:41:00
--  
在命令窗口执行,结果还是一样,打开表结构查看,结果所有的分组列都变成备注型了,不管原来是什么类型的数据

因为统计的来源表是一个储存过程生成的查询表,如果用sqlCrossTableBuilder,下面红色表名那里怎么写都提示错误
Dim cmd As New SQLCommand
cmd.ConnectionName = Mydata
cmd.CommandTimeOut = 300
cmd.CommandText = "Exec " & dr("Key") & " \'" & bu & "\',\'" & ds & "\',\'" & de & "\'"
Dim dt As DataTable = cmd.ExecuteReader()

Dim b As New SqlCrossTableBuilder("统计表1",dt)
....
是不是这种查询得到的临时表无法用sqlCrossTableBuilder?
还有其他办法吗?


--  作者:有点蓝
--  发布时间:2021/6/19 15:59:00
--  
临时表不能使用SqlCrossTableBuilder

添加一个临时列,比如

tbl.DataSource = b.BuildDataSource
tbl.Datatable.Add("机台2", GetType(integer), "Convert([机台], \'System.Int32\')")
tbl.cols("机台2").visible = false
tbl.Sort = "机台2"

--  作者:HappyFt
--  发布时间:2021/6/19 16:48:00
--  
Convert([机台], \'System.Int32\')") 这句怎么写都不对
无法设置列"机台2"的表达式,原因:输入字符串的格式不正确?


--  作者:有点蓝
--  发布时间:2021/6/19 16:50:00
--  
去掉自动汇总代码:b.VerticalTotal = True,添加临时列后再使用合计模式