首页 > 解决方案 > 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

标签: sqloraclehana

解决方案


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;

推荐阅读