Oracle:VLOOKUP等价

时间:2016-11-07 08:34:12

标签: sql oracle 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

我想要像Excel VLOOKUP函数那样找到the_value介于my_datedate_1之间的值(date_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。为简单起见,这些是样本数据。

2 个答案:

答案 0 :(得分: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;

这也要求您的“日期”范围不重叠,否则您会得到一些奇怪的结果。

答案 1 :(得分: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