Как запросить таблицу с предложением Where, которое проходит по другой таблице? - PullRequest
0 голосов
/ 02 мая 2018

В моей базе данных 2 таблицы

Таблица 1

 DC     Item     Day
6006    123      May 1
6006    123      May 2
7036    456      May 6

Таблица 2

 DC     Item      Day    ShippedCases    Label Type
6006    123      May 1       100             A
6006    123      May 2       200             A
6006    123      May 2       500             B 
7036    456      May 2       300             B
7036    456      May 6       400             A

Таблица 1 содержит все уникальные записи, которые меня интересуют, но не содержат ShippedCases или Label Type. Как я могу написать запрос, чтобы выбрать все записи из таблицы 2, которые соответствуют записям в таблице 1?

В этом случае я хочу выбрать поля DC, Item, Day в Таблице 2, которые соответствуют Таблице 1, и суммировать Отправленные Случаи, где Тип Метки = A.

Просмотр результатов

DC       Item   Day     Shipped Cases    Label Type
6006     123    May 1        100              A
6006     123    May 2        200              A 
7036     456    May 6        400              A

Я думаю, что это простое утверждение Select, но я не знаю, как настроить мое предложение where, при этом мои первые 3 параметра - это поля таблицы 1 и 4-й параметр таблицы 2. Тип метки = A.

Любой совет будет оценен!

1 Ответ

0 голосов
/ 02 мая 2018

Вы хотите использовать INNER JOIN здесь и агрегацию с SUM() и GROUP BY

SELECT
    table1.DC,
    table1.Item,
    table1.Day,
    Sum(table2.ShippedCases) as ShippedCases,
    Table2.LabelType
FROM
    Table1
    INNER JOIN Table2 
        ON Table1.DC = Table2.DC
            AND Table1.Item = Table2.Item
            AND Table1.Day = Table2.Day
WHERE
    Table2.LabelType = 'A'
GROUP BY 1,2,3,5

Если у вас есть элементы в Таблице 1, которых нет в Таблице2, вам нужно преобразовать их в ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ:

SELECT
    table1.DC,
    table1.Item,
    table1.Day,
    Sum(table2.ShippedCases) as ShippedCases,
    Table2.LabelType
FROM
    Table1
    LEFT OUTER JOIN Table2 
        ON Table1.DC = Table2.DC
            AND Table1.Item = Table2.Item
            AND Table1.Day = Table2.Day
            AND Table2.LabelType = 'A'
GROUP BY 1,2,3,5

Обратите внимание, что мы перемещаем предложение WHERE вверх в предложение ON в LEFT OUTER JOIN, чтобы гарантировать, что только элементы в Table2 ограничены для этого LabelType. Другими словами, Teradata будет фильтровать Table2 ДО присоединения к Table1. ПОТОМУ ЧТО это ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, вы получите ВСЕ записи из Таблицы 1, а затем только те из Таблицы 2, которые проходят фильтр и соответствуют условиям ВКЛ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...