sql - SQL | 连接两个表并针对任何匹配行获取其中一个表列
问题描述
表 A 存储站点物品明智的转移/运输库存。
表 A
site article transfer_Stock transit stock
s1 a1 10 15
s1 a2 20 25
表 B 具有站点-物品-存储位置明智的库存
表 B
site article sloc stock
s1 a1 1000 5
s1 a1 2000 10
s1 a1 3000 15
s1 a2 1000 20
s1 a2 5000 25
我想获得网站文章的总库存
需要输出 -
site article sloc transfer_stock transit_stock stock
s1 a1 1000 10 15 5
s1 a1 2000 0 0 10
s1 a1 3000 0 0 15
s1 a2 1000 20 25 20
s1 a2 5000 0 0 25
我想针对任何一行 sloc 转移库存和运输库存。
表 A 有 10 亿行,表 B 有 15 亿行。
在 sql 中实现这一目标的优化方法是什么。
目前我们正在实现这一目标
SELECT A.site,
A.article,
B.sloc,
case when MIN_B.sloc=B.sloc then A.transfer_stock else 0 end as transfer_stock,
case when MIN_B.sloc=B.sloc then A.transit_stock else 0 end as transit_stock,
B.stock
FROM A
LEFT OUTER JOIN B ON A.site = B.site AND A.article = B.article
LEFT OUTER JOIN (select site,article,min(sloc) from B group by site,article) MIN_B on A.site = MIN_B.site AND A.article = MIN_B.article
解决方案
SELECT A.site, A.article, B.sloc, A.transfer_stock, A.transit_stock, B.stock
FROM A
LEFT JOIN B ON A.site == B.site AND A.article == B.article;
推荐阅读
- c++ - 第 K 个缺失的正整数
- multithreading - 另一个线程中的 or-tools 给出了奇怪的解决方案 java
- docker - 来自守护程序的错误响应:在节点加入之前达到超时
- python - 一个元素的查找索引在列表中多次出现
- node.js - Node Js writeFile在循环许多Base64数据时总是返回0字节
- python - 计算每个系列 Pandas DataFrame 中的特定单词
- siri - 如何在 iOS 14 中为 SiriKit 意图定制 Siri 启动短语
- javascript - Angular 10 不支持 IE11
- python - 如何配置我的数组以执行将小数作为一个元素的数字?
- php - 我可以让我的 WordPress 网站离线使用吗?