2016-08-22 49 views
0

我想创建一个查询,该查询根据对其应用的Where过滤器访问不同的表格。根据过滤条件查询不同的表格

例如,如果预定义的查询被查询这样的:

Select A,B,C,D from the_query 
Where A>0 and A<5 
[Gets data from source table A0to5_Table) 

Select A,B,C,D from the_query 
Where A>=5 and A<10 
[Gets data from source table A5to10_Table) 

所有的源表具有相同的架构。我想要的是查询中的CASE类型语句,例子是基于Where过滤器的。

使用SQL(PostgreSQL或SQL Server)可以做到这一点吗?或者是使用带参数的存储过程的唯一选项?

+0

每列可以有来自不同范围的表的数据,即A> = 5 AND <10,因此表A5到A9,B> 0和B <5表A0到A4)或所有列使用相同的来源表?您将最有可能编写[Dynamic SQL语句](https://msdn.microsoft.com/zh-CN/library/ms188001.aspx)。 –

+0

如何将值传递到条件? –

+0

我的示例的用例是预先计算的聚合,其中变量A是时间戳。对于一小段时间(即1天)A> = 1/1/2016 0:00和A <= 2/1/2016 0:00,我想查询一个包含1分钟聚合记录的表格。但是如果时间范围很大(也许是一年)A> = 1/1/2015 0:00和A <= 1/1/2016 0:00,那么我想要返回每日汇总值。注意我不想动态计算聚合。目标是在大时间范围内不返回大量记录。 –

回答

1

你不能在SQL中这样做。一个主要原因是,将相同的数据存储在不同的表中并不是SQLish存储数据的方式。您应该将这些数据存储在一个表中,可能需要使用列来指定其他信息。

你可以做的一件事是将union all表格放在一起。像这样:

select t.* 
from ((select t.* from A0to5_Table) union all 
     (select t.* from A5to10_Table) 
    ) t 
where a > 0 and a < 5; 

你甚至可以使用一个视图来达到这个目的。

许多数据库都支持使用列作为键的表分区。这为您提供了所需的功能,并将所有数据放在一个表中。您需要查阅您的特定数据库的文档,以了解这适用于您的情况。

+0

谢谢戈登。你有没有看到我在上面澄清过,A列是一个时间戳。好吧,让我说我把所有的数据放在同一个表中,并使用额外的列来编码A的时间分辨率(例如,分钟,每小时,每天),有没有一种方法可以让查询自动确定分辨率列过滤器,基于查询的A值范围? (希望是有道理的)。 –

+0

@SteveS。 。 。 。最好将问题作为*问题*而不是在评论中提问。请提供其他问题的样本数据和期望的结果。 –

相关问题