sql - 在表之间复制缺失的数据
问题描述
我有一张桌子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和预期结果表相同
解决方案
我必须让我的水晶球超速运转。
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:如果表中确实有50
列Alpha
,则需要union all
查询 50 次,每次查询一列。
推荐阅读
- android - 在我的代码中出现错误 500,但在我的浏览器中没有
- flutter - 如何在 Flutter 中获得安全的区域大小/填充
- r - 在 R 中将矩阵保存为对象的问题
- powershell - 遍历 CSV 并创建一个数组
- snowflake-cloud-data-platform - 雪花存储过程 - 如何检索 CTAS 语句创建的行数
- zsh - JDK 的别名在 ZSH 中不起作用,但在 bash 中起作用
- python - 将 Python Flask 应用程序部署到 Heroku 崩溃了
- php - apache 临时通过脚本启动 VirtualHost
- ruby - Ruby中浮点变量的最大值
- javascript - 正则表达式 (Regex) 一次只允许数字或带有数字的特定字符