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


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

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

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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
[原创]按时间段UNION不确定数量但相似表名SQL写法  发帖心情 Post By:2010/12/11 22:45:00 [显示全部帖子]

如果表A、表B结构相同,可以:

 

Select * From {表A} UNION Select * From {表B}

 

注意只能作为查询表。

 

现在我有许多表,这些表按月生产,表名

生产记录201009,

生产记录201010,

生产记录201011,

生产记录201012,

生产记录201101,

生产记录201102,

..............

结构完全相同

现在联合查询UNION,从某段时间到某段时间符合条件的记录

怎么写Select句?

Select {record%}.生产记录ID From user_all_tables INNER JOIN {产品安排表} ON {record%}.产品ID = {产品安排表}.产品ID where table_name like 'record%' and BETWEEN '# var("开始时间") #' AND '# var("结束时间") #'

 

是这是思路吗?

[此贴子已经被作者于2010-12-11 22:49:35编辑过]

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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/12 10:34:00 [显示全部帖子]

就是试过了不行才上来问得,在百度上也找了,在foxtable上也找了,无果。


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/12 11:09:00 [显示全部帖子]

Dim nms() As String = {"表A", "表B", "表C"}其中"表A", "表B", "表C"指的是什么?能不能具体讲一下,有点摸不到脉络

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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/13 10:45:00 [显示全部帖子]

测试不行,我有如下疑问:

 

Dim lst As List(Of String)

Dim ym1 As Integer = "生产记录200905"‘这里应该是String才对

Dim ym2 As Integer = "生产记录201010"  ‘这里应该是String才对

lst = Connections("nwnd").GetTableNames
For Each nm As String In lst
     If nm>=ym1 AndAlso nm<=ym2 Then  ‘String应该不能用>=或则<=号吧,但我不知道如何写,用  like '生产记录%' ?

        lst.Add(nm)

    End IF
Next

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


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/13 15:03:00 [显示全部帖子]

字符串的确可以比较大小,学习了。

 

应该定义两个lst,

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

        lst.Add(nm)

 

这个得到的永远是数据源所有的表名称

 

Dim Lst1 As List(Of String)
Dim Lst2 As New List(of String)
Dim ym1 As Integer = "生产记录200905"

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

Lst1 = Connections("AsiaCardServera").GetTableNames
For Each nm1 As String In Lst1
    If nm1>=ym1 AndAlso nm1<=ym2 Then
        Lst2.Add(nm1)'
End IF
Next
Dim SQL As String
For Each nm2 As String  In Lst2
    If SQL > "" Then
        SQL = SQL & " UNION ALL "
    End If
    SQL = SQL & "Select * From {"& nm2 &"}"
Next
OutPut.Show("合成的SQL语句:" & SQL)


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/13 15:48:00 [显示全部帖子]

OutPut.Show到是可以了,

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

好像不行。

麻烦再指点一下。

 

还有字符串比较中如何排除年表

 

生产记录2008,’年表

生产记录2009,’年表

生产记录2010,’年表

生产记录201009,’月表

生产记录201010,’月表

生产记录201011,’月表

生产记录201012,’月表

生产记录201101,’月表

生产记录201102,’月表

..............


 

[此贴子已经被作者于2010-12-13 16:06:25编辑过]

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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/13 20:47:00 [显示全部帖子]

不错,的确很神奇。哈哈,谢谢了。


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/14 10:23:00 [显示全部帖子]

请问红色部分代码有问题吗,怎么---------------------------
提示
---------------------------
Select语句执行错误,请检查语法及数据源设置。
---------------------------
确定  
---------------------------

Dim Lst1 As List(Of String)
Dim Lst2 As New List(of String)
Dim ym1 As String = "生产记录200901"
Dim ym2 As String = "生产记录201212"
Lst1 = Connections("AsiaCardServera").GetTableNames
For Each nm1 As String In Lst1
If nm1>=ym1 AndAlso nm1<=ym2 AndAlso nm1.Length = ym1.Length Then
        Lst2.Add(nm1)'
End IF
Next
Dim SQL As String
For Each nm2 As String  In Lst2
    If SQL > "" Then
        SQL = SQL & " UNION ALL "
    End If
    SQL = SQL & "Select * From {"& nm2 &"}"
Next

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


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/14 10:57:00 [显示全部帖子]

还是同样提示:---------------------------
提示
---------------------------
Select语句执行错误,请检查语法及数据源设置。
---------------------------
确定  
---------------------------


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/14 11:30:00 [显示全部帖子]

好方法!找到了问题。

 

 

其中有一张最早的表比其他表多几个字段。刚才执行的时候刚好有这张表在其中,所以出现:

---------------------------
提示
---------------------------
Select语句执行错误,请检查语法及数据源设置。
---------------------------
确定  
---------------------------

 

按照你的方法,SQL执行窗口执行提示:

包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达

百度了一下:“多表合并一表,每个查询出的单独的表要有一致的字段数和数据类型"

这样问题就找出来了。

 

谢谢,同时希望对别人有启发


 回到顶部
总数 11 1 2 下一页