VLOOKUP的SQL版本
我是SQL新手,如果您有空,我想知道是否有人可以帮我复制SQL中的ExcelVLOOKUP的SQL版本,sql,join,lookup,vlookup,Sql,Join,Lookup,Vlookup,我是SQL新手,如果您有空,我想知道是否有人可以帮我复制SQL中的ExcelVlookup函数 从一些研究中,我怀疑这是我需要的join函数之一,但是,我不想只选择两个表中包含的数据-我只想对照另一个表查找一个表中的值 如果数据包含在查找表中,则返回值,如果不包含,则只返回NULL 我在下面给出了几个示例表来帮助说明我的问题 请注意,产品“C”和“D”不在表2中,但它们仍在结果表中,但值为空 此外,我有大量独特的产品,所以我不是在寻找一个答案,其中包括硬编码,例如当[产品]=“A”时的情况,然后
Vlookup
函数
从一些研究中,我怀疑这是我需要的join
函数之一,但是,我不想只选择两个表中包含的数据-我只想对照另一个表查找一个表中的值
如果数据包含在查找表中,则返回值,如果不包含,则只返回NULL
我在下面给出了几个示例表来帮助说明我的问题
请注意,产品“C”和“D”不在表2中,但它们仍在结果表中,但值为空
此外,我有大量独特的产品,所以我不是在寻找一个答案,其中包括硬编码,例如<代码>当[产品]=“A”时的情况,然后…
表1
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
看起来您需要外部联接,在我的示例中,我将使用左侧联接:
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
这是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 <> ''
选择*
从表1中取t1
左外连接表2为t2
关于t1.Product=t2.Product
及t2.产品「
左外连接表3为t3
在t1.Product=t3.Product2上
和t3.2“
关键是,您需要排除join table列为空的行,否则返回的行将比table1的多。真正的vlookup不会向左表中添加任何行
我甚至还添加了第三个表以起作用。“我想知道是否有人可以帮助我在SQL中复制Excel Vlookup函数?”=您肯定可以尝试一下吗?如果您希望它正常工作,您需要添加和t2.Product“”,否则您可能会得到比您要求的更多的记录。因为如果“匹配”列中存在重复项,则联接可能会重复。@user890332,我不确定您的建议会阻止什么情况发生,您能详细说明一下吗?实际上我的编辑不清楚。我的意思是,如果右表中有重复的行,左外联接将不会返回左表中的行。如果您需要一个精确的计数(这是我所需要的),那么您需要找到一种方法来缩小范围,使每个联接只返回一行。使用distinct(或group by)?问一个新问题,没有任何细节就很难回答。包括CREATETABLE和insert语句,用于说明问题的示例数据。是否需要第三个表?如果是的话,你会在里面放什么?