将预算数字加入第一次匹配(加入)
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 个表