以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]垂直表和水平表的转换  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97203)

--  作者:twef
--  发布时间:2017/3/7 22:53:00
--  [求助]垂直表和水平表的转换


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

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

如何将垂直表“订单”转化成水平表“表B”?并且要求同一天同一客户同一产品实现累计功能。


--  作者:有点蓝
--  发布时间:2017/3/7 22:56:00
--  
直接做交叉统计即可:http://www.foxtable.com/webhelp/scr/0165.htm
--  作者:twef
--  发布时间:2017/3/7 23:02:00
--  
交叉统计是临时表,我要的不是临时表,并且考虑到以后的实际应用,可能增加一列统计“PD01+PD02"或"PD01+PD02+PD03”的数量
[此贴子已经被作者于2017/3/7 23:06:41编辑过]

--  作者:有点蓝
--  发布时间:2017/3/7 23:07:00
--  
统计后把数据填充到数据表不就行了



--  作者:twef
--  发布时间:2017/3/7 23:16:00
--  
我的意思是能否通过狐表“垂直表和水平表的转换”这一节帮助文件,增加相应其他代码来实现
--  作者:twef
--  发布时间:2017/3/7 23:46:00
--  
Dim dtb As New DataTableBuilder("表B")
dtb.AddDef("日期",Gettype(Date))
dtb.AddDef("客户",Gettype(String),10)
For Each v As String In DataTables("订单").GetValues("产品")
    dtb.AddDef(v, Gettype(Double))
Next
dtb.Build()
For Each v As String() In DataTables("订单").GetValues("日期|客户")
    Dim dr1 As DataRow = DataTables("表B").AddNew()
    dr1("日期") = v(0)
    dr1("客户") = v(1)
    For Each dr2 As DataRow In DataTables ("订单").Select("日期 = \'" & v(0) & "\' And 客户 = \'" & v(1) & "\'")
        dr1(dr2("产品")) = dr2("数量")
    Next
Next
MainTable = Tables("表B")
请教上面代码如何修改增加“同一天同一客户同一产品实现累计功能

--  作者:有点蓝
--  发布时间:2017/3/8 8:49:00
--  
Dim dtb As New DataTableBuilder("表B")
dtb.AddDef("日期",Gettype(Date))
dtb.AddDef("客户",Gettype(String),10)
For Each v As String In DataTables("订单").GetValues("产品")
    dtb.AddDef(v, Gettype(Double))
Next
dtb.Build()
For Each v As String() In DataTables("订单").GetValues("日期|客户")
    Dim dr1 As DataRow = DataTables("表B").AddNew()
    dr1("日期") = v(0)
    dr1("客户") = v(1)
    Dim filter As String = "日期 = \'" & v(0) & "\' And 客户 = \'" & v(1) & "\'"
    For Each v1 As String In DataTables("订单").GetValues("产品",filter)
        dr1(v1) = DataTables("订单").Compute("Sum(数量)",filter & " and 产品=\'" & v1 & "\'")
    Next
Next
MainTable = Tables("表B")