以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  谁能帮忙分析这代码,,,,,  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=11303)

--  作者:jackshen888
--  发布时间:2011/7/17 7:08:00
--  谁能帮忙分析这代码,,,,,

Dim t As Table
Dim s1,s2  As String
Dim Ls As List(Of String)
Ls = DataTables("b").GetUniqueValues("", "加工工艺")


For Each s1 In Ls
    s2+ =",iif(加工工艺 = \'" & s1 & "\'" & ",数量 ,Null) as 加工工艺" & s1.Replace("号工艺","")
Next


t = Tables("窗口1_Table1")
t.FILL("Select [_Identify],订单号,颜色" & s2 & ",数量 as 订单数量 From{B}",True)
t.sort = "订单号"

 

 

这段代码其中有一个我不太理解,,能否有朋友指导一下,,“”

 

For Each s1 In Ls
    s2+ =",iif(加工工艺 = \'" & s1 & "\'" & ",数量 ,Null) as 加工工艺" & s1.Replace("号工艺","")
Next

 

 

就是这部分了。谢谢请加注解。


--  作者:狐狸爸爸
--  发布时间:2011/7/17 7:42:00
--  

我SQL不行,也难以理解,楼主最好问问代码的原作者。

 

其实统计的话,用foxtable自带的交叉统计、分组统计,更容易一点,不伤脑细胞。


--  作者:bjljb
--  发布时间:2011/7/17 10:20:00
--  

请把代码中提到的b表给个样子出来。

 

另外,s2+ =好像不是Foxtable的语法吧!


--  作者:hhbb
--  发布时间:2011/7/17 10:49:00
--  

Dim g As New CrossTableBuilder("统计表1", DataTables("b"))

g.HGroups.AddDef("订单号")

g.HGroups.AddDef("颜色")

g.VGroups.AddDef("加工工艺")

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

g.HorizontalTotal = True

g.Build()


Dim t As Table = Tables("统计表1")

Dim s As String


For Each c As Col In t.Cols

    If c.name.StartsWith("数量_") Then \'如列名是以[数量_]开头则       

        c.Caption = c.name.Replace("数量_","加工工艺") \'重新生成列标题 

    End If

Next

t.Cols("合计").Caption = "订单数量"

t.DataTable.BuildHeader()

MainTable = t


也还是要伤一点脑细胞的:

重新生成想要的列标题



[此贴子已经被作者于2011-7-17 11:04:23编辑过]

--  作者:hhbb
--  发布时间:2011/7/17 11:01:00
--  
其实一楼的代码也不难理解:从 DataTables("b").GetUniqueValues("", "加工工艺")取得的不重复的记录是[1号工艺,2号工艺,3号工艺],以此生成水平交叉列(需改名为:加工工艺1,加工工艺2,加工工艺3)

For Each s1 In Ls
    s2+ =",iif(加工工艺 = \'" & s1 & "\',数量 ,Null) as 加工工艺" & s1.Replace("号工艺","")
Next

以上语句是为了动态生成下面sql语句中颜色(颜色对应)部位字符串

Select [_Identify],订单号,颜色,iif(加工工艺 = \'1号工艺\',数量 ,Null) as 加工工艺1,iif(加工工艺 = \'2号工艺\',数量 ,Null) as 加工工艺2,iif(加工工艺 = \'3号工艺\',数量 ,Null) as 加工工艺3,数量 as 订单数量 From{B}
[此贴子已经被作者于2011-7-17 14:35:28编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/17 17:15:00
--  
呵呵,谢了,学习中ing.
--  作者:jackshen888
--  发布时间:2011/7/17 19:00:00
--  

hhbb,,  在吗?

 

能不能帮我把之前的这个文件改个我现在传上来的效果,,,,,

 

谢谢了

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


--  作者:hhbb
--  发布时间:2011/7/17 22:21:00
--  
Dim t As Table = Tables("窗口1_Table1")
t.StopRedraw
Dim g As New CrossTableBuilder("统计表1", DataTables("b"))
g.HGroups.AddDef("订单号")
g.VGroups.AddDef("加工工艺")
g.Totals.AddDef("数量")
g.HorizontalTotal = True
t.DataSource =g.BuildDataSource()

t.DataTable.DataCols.Add("颜色",Gettype(String))
t.Cols("颜色").Move(1)
For Each r As Row In t.Rows
    r("颜色") = DataTables("b").GetComboListString("颜色","订单号=\'" & r("订单号") & "\'").replace("|",",")
Next

For Each c As Col In t.Cols
    If c.name.StartsWith("数量_") Then 
        c.Caption = "已" & c.Caption & "数量"
    End If
Next

t.Cols("合计").Caption = "订单数量"
t.DataTable.BuildHeader()
t.AutoSizeCols
t.ResumeRedraw