2016-11-07 82 views
6

我有這樣一個觀點:甲骨文:VLOOKUP等效

col_1 col_2 my_date 
----- ----- ------- 
1  5  2011 
2  6  2014 
3  7  2012 
4  8  2011 

和一張桌子這樣的:

date_1 date_2 the_value 
------ ------ --------- 
2010 2012 v1 
2013 2015 v2 

我想類似的東西找到價值(the_value)對Excel VLOOKUP函數my_datedate_1date_2之間,這樣我就可以有這樣的結果:

col_1 col_2 my_date the_value 
----- ----- ------- --------- 
1  5  2011  v1 
2  6  2014  v2 
3  7  2012  v1 
4  8  2011  v1 

日期列的類型是DATE。這些都是簡單的示例數據。

+0

你爲什麼不子句之間通過連接這兩個表使用? – Buddi

+0

您可以在「date_1和date_2之間的my_date」上加入這兩個表格,但可以複製您的行。如果你想要vlookup的確切功能,你可以按照你的第一個表中的列進行分組,並使用First_Value(the_value)來嘗試嗎? –

回答

8

這是SQL與between的聯接,而不是等同聯接條件。

select t1.col_1, t1.col_2, t1.my_date, t2.the_value 
from table_one t1 
    join table_two t2 on t1.my_date between t2.date_1 and t2.date_2; 

注意between包括邊界所以它也將返回行,其中my_date2010。如果你不希望出現這種情況,你需要使用一個連接條件與><

select t1.col_1, t1.col_2, t1.my_date, t2.the_value 
from table_one t1 
    join table_two t2 on t1.my_date > t2.date_1 
        and t1.my_date < t2.date_2; 

這也需要你的「日期」的範圍是不重疊的,否則,你會得到一些奇怪的結果。

2

您可以使用相關查詢來獲取值:

SELECT t.*, 
     (SELECT s.the_value FROM t2 s 
     WHERE t.my_date between s.date_1 and s.date_2) as the_value 
FROM t1 t