SQL |Соедините две таблицы и получите один из столбцов таблиц в любой соответствующей строке - PullRequest
0 голосов
/ 17 мая 2019

В таблице 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 содержится 1 миллиард строк, а в таблице B - 1,5 миллиарда.

что такое оптимизированный способ достижения этого в 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

1 Ответ

0 голосов
/ 17 мая 2019
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;
...