Я не могу поделиться фактическими данными компании, поэтому, пожалуйста, имейте в виду мой упрощенный пример с той же структурой.
У нас есть система, которая отслеживает пакеты в базе данных MS SQL. Каждая упаковка содержит 1-3 коробки. Все пакеты имеют как минимум одну коробку «BoxSide». Кроме того, они могут также иметь «BoxOuter» рядом с ним, и этот блок может иметь «BoxInner» внутри него. В каждом блоке есть содержимое, о котором мы храним данные.
Таким образом, всего существует пять отдельных таблиц: одна с информацией о пакете, одна для каждого блока (сторона, внешний и внутренний) и одна таблица, содержащая данные осодержание каждого. Они связаны друг с другом, как показано на следующей диаграмме:
Табличная диаграмма
Я хочу выполнить запрос, который объединит все эти данные вотчет с одной записью для каждого пакета и полями для содержимого каждого поля, оставляя неприменимые поля пустыми. Что-то вроде:
Package. *, BoxSide.Data1, Boxside.Data2, BoxOuter.Data1, BoxOuter.Data2, BoxInner.Data1, BoxInner.Data2
Для повторения:
- Я хочу отдельную запись для каждого пакета
- Каждый пакет имеет BoxSide
- Пакет МОЖЕТ иметь BoxOuter
- BoxOuter МОЖЕТ иметь BoxInner
Я пробовал различные объединения, чтобы связать эти данные вместе, но я, кажется, всегда получаю пропущенные пакеты (если у них не было определенного типа ящика) или повторяющиеся записи одного и того же пакета несколько раздля разных типов коробок. Слишком много неудачных попыток перечислить здесь.
Может кто-нибудь с некоторым SQL-фу, пожалуйста, помогите мне с запросом, который сделает это?