合并两个 tables 使用完整的外部连接和一个扭曲 - 根据行数取消来自连接 table 的值

Merge two tables using full outer join with a twist - nullify values from join table based on count of rows

我有两个 table 我想使用完全外部联接的原则进行合并 - 但例外情况是当 'right' 中的匹配行数时匹配行应该被取消 table 小于左侧的匹配行数 table - 反之亦然。

举个例子更有意义: 下面的 [Transactions] table 应该与 [Units Ordered] table 合并 - 导致 3td table。 Join key 是 ID 和 Season/Ordered Season.

[Units Ordered] table 有两行 ID 为 1 和 Ordered Season 2017 而 [Transactions] table 有两行。我需要从 [Units Ordered] table 中仅检索一个匹配行的值 Units Ordered 和 Ordered Seaon - 保持第二行来自 [Transactions] table 但 Units Ordered 和 Ordered 的值无效赛季。

这与连接的整个想法相矛盾,我不确定这是否可能。

要将 table 加载到 Power Query 中,我也尝试在这里解决问题 - 但无济于事。

非常感谢任何建议或想法

如果 unitsordered table 对于 (id, year) 组合只有一行,那么在这种情况下,您可以将第一个 table 分组为只有一行每个 (id, year) 组合。 如果不是,那么您必须首先从 unitsordered table 生成行数,然后为该组合保留第一个 table 的行数。

declare @l table (id int, val int default(10));
insert into @l(id) values (1),(2),(2),(3),(4),(4),(5),(5),(6);

declare @r table (id int, val int default(20));
insert into @r(id) values (1),(2),(3),(4),(4),(5),(5),(7);

select *
from
(
select *, row_number() over(partition by id order by val) as rownum
from @l 
)as l
full join
(
select *, row_number() over(partition by id order by val) as rownum
from @r 
)as r on l.id = r.id and l.rownum = r.rownum;

--..or..?
select 
    lid, case when lcount = rcount then lval end as lval, 
    rid, case when lcount = rcount then rval end as rval,
    lcount, rcount
from
(
select 
l.id as lid, l.val as lval, count(l.id) over(partition by l.id) as lcount, 
r.id as rid, r.val as rval, count(r.id) over(partition by r.id) as rcount
from @l as l
full join @r as r on l.id = r.id
) as src;