2016-08-22 46 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。 。 。 。最好將問題作爲*問題*而不是在評論中提問。請提供其他問題的樣本數據和期望的結果。 –

相關問題