我有一个包含联系人号码的表和另一个包含“length”变量和数字列的引用表。我需要的是找到前缀名称,其中数字的前缀与引用表中的前缀匹配,但它应该是与最长前缀匹配的前缀(天哪,我希望这有道理)
到目前为止我试过的:
select a.record_type,a.number,b.prefix,b.prefix_name
from first_table a , second_table b
where a.transaction_date=20180924 and case
when b.length=1 then substr(a.number,1,1)=b.prefix
when b.length=2 then substr(a.number,1,2)=b.prefix
when b.length=3 then substr(a.number,1,3)=b.prefix
when b.length=4 then substr(a.number,1,4)=b.prefix
when b.length=5 then substr(a.number,1,5)=b.prefix
when b.length=6 then substr(a.number,1,6)=b.prefix
when b.length=7 then substr(a.number,1,7)=b.prefix
when b.length=8 then substr(a.number,1,8)=b.prefix
when b.length=9 then substr(a.number,1,9)=b.prefix
when b.length=10 then substr(a.number,1,10)=b.prefix
when b.length=11 then substr(a.number,1,11)=b.prefix
when b.length=12 then substr(a.number,1,12)=b.prefix
when b.length=13 then substr(a.number,1,13)=b.prefix
when b.length=14 then substr(a.number,1,14)=b.prefix
end
但是它仍然返回重复的结果,即:如果数字是12345,它将匹配前缀为1234和123的引用,而实际上我只需要1234。
有没有什么办法可以把这个案子分清轻重缓急?谢谢
两个表中的数据示例:example
我当前的结果和期望的结果:结果
2条答案
按热度按时间im9ewurl1#
你可以用
row_number()
:这可以更简洁地表述为:
另一种方法是利用个体差异进行比较
join
在第一场比赛中停下来:nr9pn0ug2#
好吧,我改了,试试这个: