将预算数字加入第一次匹配(加入)

Posted

技术标签:

【中文标题】将预算数字加入第一次匹配(加入)【英文标题】:Joining budget figures to first match (join) 【发布时间】:2021-08-03 09:48:10 【问题描述】:

我有一个子表(表 2),其中包含多个位置和汽车类别,并带有一个预算列。

我想将表 2 加入到我的主表中,其中包含客户姓名、多个位置和汽车类别,以及 20 个额外的列。

从我的主表中,我如何将表 2 加入到第一个匹配项而不是每一列。例如:

[ (并且没有出现灰色的)。

【问题讨论】:

【参考方案1】:

您可以使用窗口函数。不清楚你如何定义“第一”,所以这只是将值放在任意行上:

select m.*,
       (case when row_number() over (partition by member, borough, car order by member) = 1
             then t2.target
        end)
from main m left join
     table2 t2
     on t2.borough = m.borough and t2.car = m.car;

如果您不想为每一列都使用case 表达式,您可以使用这样的子查询:

select m.*, t2.*
from (select m.*,
             row_number() over (partition by member, borough, car order by member) as seqnum
      from main m
     ) m left join
     table2 t2
     on t2.borough = m.borough and
        t2.car = m.car and
        m.seqnum = 1;

【讨论】:

【参考方案2】:

由于表 T2 似乎包含唯一行,因此重复(由 LEFT JOIN 引起)必须来自主表中的重复值。为确保对主表中的唯一组合执行连接,您可以在公用表表达式中选择 DISTINCT 值。像这样的

with unq_main_cte as (
    select distinct [Name], borough, car
    from main)
select m.*, isnull(t2.[target], 0) [target]
from unq_main_cte m
     left join table2 t2 on t2.borough = m.borough and t2.car = m.car;

【讨论】:

以上是关于将预算数字加入第一次匹配(加入)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 excel 索引匹配转换为 Access - 加入 4 个表

如果 pandas 数据框的第一列不匹配,则加入第二列

开通加入支付宝小程序怎么收费

正则表达式(/[^0-9]/g,'')中的"/g"是啥意思 ?????

openldap加入复杂的密码策略

当用户加入房间时,如何将没有隶属关系的用户直接设置为成员 - Ejabberd