首页 > 解决方案 > 在表之间复制缺失的数据

问题描述

我有一张桌子Alpha

一种 C
2 4 3
1 5 1
4 3 空值

我有一个表的参考,比如一列的BETA

一种
1
2
3
4
5

我想将Alpha中缺少的 关于Beta的数据复制到另一个表Gamma中,这样

预期结果如下

一种 C
3 1 2
5 2 4
空值 空值 5

它必须参考 beta 表,因为它并不总是按顺序排列,例如。beta 表可以是 2,3,5,alpha 表有 2 和 3,所以缺失值只有 5

PS:这是一个最小的表示,实际上Alpha中有20多列但beta中只有一 列表格Alpha和预期结果表相同

标签: sqlsql-servertsql

解决方案


我必须让我的水晶球超速运转。

Alpha我认为您想根据表“Beta”中的值列表为表中的每一列生成缺失值

下面的查询所做的是找出每列 ( A, B, C) 的缺失值。之后PIVOT

; with missing as
(
    select  col = 'A', V = A
    from    Beta b
    where   not exists (select  * from Alpha a where a.A = b.A)  

    union all

    select  col = 'B', V = A
    from    Beta b
    where   not exists (select * from Alpha a where a.B = b.A)  

    union all

    select  col = 'C', V = A
    from    Beta b
    where   not exists (select * from Alpha a where a.C = b.A)  
)
select  [A], [B], [C]
from    (
            select  *, rn = row_number() over (partition by col order by V)
            from    missing
        ) m
        pivot
        (
            max(V)
            for col in ([A], [B], [C])
        ) p

PS:如果表中确实有50Alpha,则需要union all查询 50 次,每次查询一列。


推荐阅读