以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [原创]按时间段UNION不确定数量但相似表名SQL写法  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=8821)

--  作者:shofihsu
--  发布时间:2010/12/11 22:45:00
--  [原创]按时间段UNION不确定数量但相似表名SQL写法

如果表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编辑过]

--  作者:唐尸三摆手
--  发布时间:2010/12/11 23:41:00
--  
你可以亲自试一下啊
--  作者:shofihsu
--  发布时间:2010/12/12 10:34:00
--  

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


--  作者:狐狸爸爸
--  发布时间: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

 


--  作者:shofihsu
--  发布时间:2010/12/12 11:09:00
--  
Dim nms() As String = {"表A", "表B", "表C"}其中"表A", "表B", "表C"指的是什么?能不能具体讲一下,有点摸不到脉络

--  作者:狐狸爸爸
--  发布时间:2010/12/12 11:23:00
--  
呵呵,就是你要准备查询的那些表的表名啊。
--  作者:狐狸爸爸
--  发布时间: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编辑过]

--  作者:lxl
--  发布时间:2010/12/12 17:22:00
--  

这种情况要用

UNION ALL

因为UNION 连接表之后,还会检查有没有重复记录。

 


--  作者:狐狸爸爸
--  发布时间:2010/12/12 19:05:00
--  

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


--  作者:shofihsu
--  发布时间: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)