Foxtable(狐表)用户栏目专家坐堂 → [求助]这个多表查询代码怎么写?


  共有7203人关注过本帖树形打印复制链接

主题:[求助]这个多表查询代码怎么写?

帅哥哟,离线,有人找我吗?
jyh7081
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:962 积分:8505 威望:0 精华:0 注册:2012/10/3 13:25:00
[求助]这个多表查询代码怎么写?  发帖心情 Post By:2013/8/16 21:36:00 [只看该作者]

分析股piao数据想生成两个查询表(星期查询、阴历日查询),见附件
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:数据分析.zip


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

 星期    股piao1    股piao2     股piao3     股piao4     股piao5     股piao6    股piao7   ......          
  一平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅

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

2、 各只股piao阴历*的平均涨幅
 阴历日期     股piao1      股piao2      股piao3       股piao4       股piao5   股piao6     ......             
  初一平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅平均涨跌幅               
  初二                                 
  初三                                 
  ......                                 
                                    
                                    
                                    
                                    
                                    
                                    
                                    















 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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 股piao, 时间, 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 = "股piao汇总"
q.SelectString = sqlstr
q.Build
MainTable = Tables("股piao汇总")

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
jyh7081
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:962 积分:8505 威望:0 精华:0 注册:2012/10/3 13:25:00
  发帖心情 Post By:2013/8/16 22:47:00 [只看该作者]

非常感谢,成功执行。


 回到顶部
帅哥哟,离线,有人找我吗?
jyh7081
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:962 积分:8505 威望:0 精华:0 注册:2012/10/3 13:25:00
  发帖心情 Post By:2013/8/16 23:32:00 [只看该作者]

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

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


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

 回到顶部
帅哥哟,离线,有人找我吗?
jyh7081
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:962 积分:8505 威望:0 精华:0 注册:2012/10/3 13:25:00
  发帖心情 Post By:2013/8/17 10:43:00 [只看该作者]

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

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/17 14:12:00 [只看该作者]

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

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

 

 

请楼主分享一下。


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/17 16:10:00 [只看该作者]

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


 回到顶部
帅哥哟,离线,有人找我吗?
jyh7081
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:962 积分:8505 威望:0 精华:0 注册:2012/10/3 13:25:00
  发帖心情 Post By:2013/8/17 17:29:00 [只看该作者]

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

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


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

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/17 18:21:00 [只看该作者]

不管怎么样,都谢你了。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/8/17 20:15:00 [只看该作者]

2楼的代码有点问题,生成临时表 股piao汇总 的时候,有些数据被吞噬了。下面的代码才正确。

Dim otherdt As String = "日历|表列管理|股piao信息明细表|代码对照表|股piao汇总|统计表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 股piao, 时间, 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("股piao")
g.Totals.AddDef("涨幅", AggregateEnum.Average, "涨幅")
g.Build()
MainTable = Tables("统计表1")

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

 回到顶部
总数 21 1 2 3 下一页