Объединение таблиц SQL Server 2005 - PullRequest
0 голосов
/ 19 апреля 2011
  • Таблица 1: LocID, Prod_ID, Metric_ID, Metric_Data
  • Таблица 2: LocID, Metric_ID, Metric_Data

Мне нужна таблица результатов как:

  • LocID
  • Prod_ID
  • Metric_ID
  • Metric_Data при соблюдении следующих условий:

    1. Когда Metric_ID совпадает, Metric_Data будет добавлен
    2. Если Metric_ID не совпадают, будет отображаться соответствующая Metric_Data (то есть та, которая имеет значение)
    3. Обратите внимание, что в Таблице 1 и Таблице 2 существуют только некоторые общие и некоторые разные Metric_ID.

Как вы генерируете эту 3-ю таблицу? Я перепробовал все виды соединений - полное, левое, правое и т. Д.

1 Ответ

1 голос
/ 19 апреля 2011

РЕДАКТИРОВАТЬ

select
    A.LocID,
    A.Prod_ID,
    B.Metric_ID,
    coalesce(C.Metric_Data + D.Metric_Data, C.Metric_Data, D.Metric_Data) Metric_Data
from (
    select LocID, Prod_ID from table1 group by LocID, Prod_ID) A
inner join (
    select LocID, Metric_ID from table1 group by LocID
    union
    select LocID, Metric_ID from table2 group by LocID) B on A.LocID = B.LocID
left join table1 C on C.LocID = A.LocID and C.Prod_ID = A.Prod_ID and C.Metric_ID = B.Metric_ID
left join table2 D on D.LocID = A.LocID and D.Metric_ID = B.Metric_ID

Примечания:

  • A: создает все комбинации местоположения и ProdID
  • B: создает для каждого местоположения все возможныеMetricID из обеих таблиц
  • C и D: левые соединения с таблицами данных для получения метрических данных
  • Coalesce: возвращает либо C + D, либо, если одна из них имеет значение null, возвращает другую

select
    coalesce(a.LocID, b.LocID) LocID,
    a.Prod_ID,
    coalesce(a.Metric_ID, b.Metric_ID) Metric_ID,
    coalesce(a.Metric_Data + b.Metric_Data, a.Metric_Data, b.Metric_Data) Metric_Data
from table1 a
full outer join table2 b
    on a.LocID = b.LocID and a.Metric_ID = b.Metric_ID

Это предполагает

  1. Вы совпадаете по кортежу (LocID, Metric_ID)
  2. Это возможно для A илиB не иметь (LocID, Metric_ID), который существует в другом
  3. Результатом Metric_Data является либо A + B (если оба существуют), либо A или B, если существует только один для a (LocID, Metric_ID)комбинация
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...