SQL版的VLOOKUP

时间:2014-06-08 09:19:56

标签: sql join lookup vlookup

我是SQL新手,如果你有空闲时间,我想知道是否有人可以帮我复制SQL中的Excel Vlookup函数吗?

从某些研究中,我怀疑它是我需要的join函数之一,但是,我不想只选择两个表中包含的数据 - 我只是想在1个表中查找另一个表中的值。

如果数据包含在查找表中,则返回值,如果不包含,则返回NULL

我在下面给出了几个示例表来帮助说明我的问题。

请注意产品' C'和' D'表2中没有,但它们仍然在结果表中但具有NULL值。

此外,我有大量独特的产品,所以我不是在寻找包含硬编码的答案,例如; CASE WHEN [Product] = 'A' THEN...



TABLE1

Product    Quantity
-------------------
A          10
B          41
D          2
C          5
B          16
A          19
C          17
A          21

表2

Product    Cost
-----------------
A          £31.45
B          £97.23



结果表

Product   Quantity    Cost
-----------------------------
A         10          £31.45
B         41          £97.23
D         2           NULL
C         5           NULL
B         16          £97.23
A         19          £31.45
C         17          NULL
A         21          £31.45

2 个答案:

答案 0 :(得分:6)

看起来你需要一个外连接,我将在我的例子中使用左边的连接:

select t1.Product, t1.Quantity, t2.Cost
from table1 as t1
left outer join table2 as t2
    on t1.Product = t2.Product

您也可以省略外部关键字:

select t1.Product, t1.Quantity, t2.Cost
from table1 as t1
left join table2 as t2
    on t1.Product = t2.Product

答案 1 :(得分:0)

这是Lennart答案的更新版本,非常有效。

select *
from table1 as t1
left outer join table2 as t2
    on t1.Product = t2.Product
    and t2.Product <> ''
left outer join table3 as t3
    on t1.Product = t3.Product2
    and t3.Product2 <> ''

要点是,您需要排除联接表列为空的行,否则您将返回比table1多的行。真正的vlookup不会在左侧表中添加任何行。

我什至添加了第三个表格。