以文本方式查看主题

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

--  作者:jyh7081
--  发布时间:2013/8/16 21:36:00
--  [求助]这个多表查询代码怎么写?
分析股票数据想生成两个查询表(星期查询、阴历日查询),见附件
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:数据分析.zip


1、各只股票星期*的平均涨幅

 星期    股票1    股票2     股票3     股票4     股票5     股票6    股票7   ......          
  一平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅

         
  二  ......                              
  三      ......                           
 四         ......                        
  五            ......                     

2、 各只股票阴历*的平均涨幅
 阴历日期     股票1      股票2      股票3       股票4       股票5   股票6     ......             
  初一平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅               
  初二                                 
  初三                                 
  ......                                 
                                    
                                    
                                    
                                    
                                    
                                    
                                    















--  作者:有点甜
--  发布时间:2013/8/16 22:30:00
--  
 在命令窗口里运行下面的代码便可。

Dim otherdt As String = "日历|其他表"
Dim sqlstr As String = ""
For Each dt As DataTable In DataTables
    If dt.Caption IsNot Nothing AndAlso otherdt.Contains(dt.Caption) = False AndAlso otherdt.Contains(dt.Name) = False Then
        sqlstr += "select \'" & dt.Caption & "\' As 股票, 时间, CDbl(left(涨幅, len(涨幅)-1)) as 涨幅 from {" & dt.Name & "}"
        sqlstr += " union "
    End If
Next
sqlstr = sqlstr.SubString(0, sqlstr.Length - 7)
sqlstr = "select * from (" & sqlstr & ") As t1 left join {日历} as t2 on (t1.时间=t2.公历年月日)"

Dim q As new QueryBuilder
q.TableName = "股票汇总"
q.SelectString = sqlstr
q.Build
MainTable = Tables("股票汇总")

\'---------------
Dim g As New CrossTableBuilder("统计表1", DataTables("股票汇总"))
g.HGroups.AddDef("星期")
g.VGroups.AddDef("股票")
g.Totals.AddDef("涨幅", AggregateEnum.Average, "涨幅")
g.Build()
MainTable = Tables("统计表1")

\'-----------------
g = New CrossTableBuilder("统计表2", DataTables("股票汇总"))
g.HGroups.AddDef("农历日")
g.VGroups.AddDef("股票")
g.Totals.AddDef("涨幅", AggregateEnum.Average, "涨幅")
g.Build()
MainTable = Tables("统计表2")


--  作者:jyh7081
--  发布时间:2013/8/16 22:47:00
--  
非常感谢,成功执行。


--  作者:jyh7081
--  发布时间:2013/8/16 23:32:00
--  
有点甜老师,出现一个问题,5个表只分析了3个。另外,能否增加单选或多选的分析年份。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据分析.zip

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


[此贴子已经被作者于2013-8-17 12:40:23编辑过]

--  作者:jyh7081
--  发布时间:2013/8/17 10:43:00
--  
我想达到如下效果:                     
                     分析1、对各只股票星期*的平均涨幅进行分析时,增加多年选择;(数据取 平均值、众数、中数 可选)
                     分析2、对各只股票阴历*的平均涨幅进行分析时,增加多年选择;(数据取 平均值、众数、中数 可选)
                     分析1、2中的多年选择不要求一致,能否不生成临时表,因为下一步还要对其引用分析。例子文件在4楼
                     下面是我在execl中运用数据透视表进行分析的截图:

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

[此贴子已经被作者于2013-8-17 10:58:56编辑过]

--  作者:lsy
--  发布时间:2013/8/17 14:12:00
--  

楼主,日历表从哪儿来的?没看见生成或转换日期、星期的代码。

到处找有关的转换函数,就像GetPy之类的,好方便。

 

 

请楼主分享一下。


--  作者:lsy
--  发布时间:2013/8/17 16:10:00
--  

没有直接的函数,用代码转几个弯,搞定了。


--  作者:jyh7081
--  发布时间:2013/8/17 17:29:00
--  
lsy老师,我是用寿星万年历导出的,现在把程序包括源码发出共享,如果你能改编成狐表模块也算是功德无量。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:寿星万年历v5.0.2(含源码).rar

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:寿星万年历源码.txt


[此贴子已经被作者于2013-8-17 17:50:43编辑过]

--  作者:lsy
--  发布时间:2013/8/17 18:21:00
--  
不管怎么样,都谢你了。
--  作者:有点甜
--  发布时间:2013/8/17 20:15:00
--  
2楼的代码有点问题,生成临时表 股票汇总 的时候,有些数据被吞噬了。下面的代码才正确。

Dim otherdt As String = "日历|表列管理|股票信息明细表|代码对照表|股票汇总|统计表1|统计表2"
Dim sqlstr As String = ""
For Each dt As DataTable In DataTables
    If dt.Caption IsNot Nothing AndAlso otherdt.Contains(dt.Caption) = False AndAlso otherdt.Contains(dt.Name) = False Then
        sqlstr += "select \'" & dt.Caption & "\' As 股票, 时间, CDbl(left(涨幅, len(涨幅)-1)) as 涨幅 from {" & dt.Name & "}"
        sqlstr += " union "
    End If
Next
sqlstr = sqlstr.SubString(0, sqlstr.Length - 7)
Output.Show(sqlstr)
sqlstr = "select * from (" & sqlstr & ") As t1 left join {日历} as t2 on (t1.时间=t2.公历年月日)"
Dim cmd As New SQLCommand
Dim sdt As DataTable
cmd.CommandText = sqlstr
sdt = cmd.ExecuteReader()

\'---------------
Dim g As New CrossTableBuilder("统计表1", sdt)
g.HGroups.AddDef("星期")
g.VGroups.AddDef("股票")
g.Totals.AddDef("涨幅", AggregateEnum.Average, "涨幅")
g.Build()
MainTable = Tables("统计表1")

\'-----------------
g = New CrossTableBuilder("统计表2", sdt)
g.HGroups.AddDef("农历日")
g.VGroups.AddDef("股票")
g.Totals.AddDef("涨幅", AggregateEnum.Average, "涨幅")
g.Build()
MainTable = Tables("统计表2")