Foxtable(狐表)用户栏目专家坐堂 → [原创]按时间段UNION不确定数量但相似表名SQL写法


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

主题:[原创]按时间段UNION不确定数量但相似表名SQL写法

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 10:53:00 [显示全部帖子]

你可以尝试在foxtable中合成SQL语句,然后再执行:

 

例如:

 

Dim nms() As String = {"表A", "表B", "表C"}
Dim SQL As String
For Each nm As String  In nms
    If SQL > "" Then
        SQL = SQL & " UNION "
    End If
    SQL = SQL & "Select * From {"  & nm & "}"
Next

 


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 11:23:00 [显示全部帖子]

呵呵,就是你要准备查询的那些表的表名啊。

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 11:31:00 [显示全部帖子]

我来给你一段完整的,没有经过测试,请自行调试,但原理应该是通的:

 

假定你的数据源的链接名称为"nwnd",从2009年5月到2010年10月的表:
 
Dim lst As List(Of String)

Dim ym1 As Integer = "生产记录200905"

Dim ym2 As Integer = "生产记录201010"

lst = Connections("nwnd").GetTableNames
For Each nm As String In lst
     If nm>=ym1 AndAlso nm<=ym2 Then

        lst.Add(nm)

    End IF
Next

Dim SQL As String
For Each nm As String  In Lst
    If SQL > "" Then
        SQL = SQL & " UNION "
    End If
    SQL = SQL & "Select * From {"  & nm & "}"
Next
OutPut.Show("合成的SQL语句:" & SQL)

 

 

[此贴子已经被作者于2010-12-12 11:31:25编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 19:05:00 [显示全部帖子]

呵呵,是应该加上All,因为这里不需要排除重复。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/13 10:53:00 [显示全部帖子]

1、变量定义错误,应该用String。

2、字符串其实也可以比较大小的。

 

如果你不通过,就改为用整数比较算了。

[此贴子已经被作者于2010-12-13 10:53:08编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/13 15:24:00 [显示全部帖子]

图片点击可在新窗口打开查看

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/13 16:30:00 [显示全部帖子]

排除年表:

 

For Each nm1 As String In Lst1
    If nm1>=ym1 AndAlso nm1<=ym2 AndAlso nm1.Length = ym1.Length Then
        Lst2.Add(nm1)'
End IF


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/14 10:30:00 [显示全部帖子]

图片点击可在新窗口打开查看

 

Tables("窗口2_Table1").Fill(SQL, "AsiaCardServera", True)


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/14 11:08:00 [显示全部帖子]

output.show(SQL)

 

从命令窗口将生成的SQL语句复制到SQL执行窗口执行,看看SQL语句有没有问题,如果有问题,看看问题在哪。

 

当然你得保证你的数据源名称或选定的数据源正确。


 回到顶部