объединить две идентичные структуры таблиц с разными данными - PullRequest
6 голосов
/ 22 октября 2011

Edit: После попытки использования метода COALESCE я теперь вижу проблему, когда данные повторяются с одинаковыми данными для каждой категории мощности. Колонка 2 - это мощность. enter image description here

Я создал две временные таблицы с одинаковой структурой таблиц. В этих таблицах есть несколько столбцов, которые могут иметь одинаковые значения, а затем несколько столбцов значений, которые будут иметь разные номера. Некоторые из них будут NULL в одном столбце, а не NULL в другом. Я хочу собрать все значения вместе и в строках с одним и тем же сайтом и заводом. Я бы хотел, чтобы эти значения были объединены.

Вот пример того, как могут выглядеть две таблицы, и результат, который я ожидаю

ТАБЛИЦА1:

SITE      PLANT          VALUE_1           VALUE 2
S1        P1             54                66
S1        P2             43                43

ТАБЛИЦА 2:

SITE      PLANT         VALUE_1           VALUE_2
S1        P1            33                43
S2        P1            34                22

РЕЗУЛЬТАТ:

SITE      PLANT         t1_VALUE_1    t1_VALUE_2    t2_VALUE_1      t2_VALUE2
S1        P1            54            66            33              43
S1        P2            43            43            NULL            NULL
S2        P1            NULL          NULL          34              22

Моими первоначальными мыслями было бы полное соединение. Однако это не работает, потому что в вашем операторе select вы должны указать, откуда брать столбцы, например site и plant; но чтобы выбрать t1.site и t2.site, нужно сгенерировать два столбца. Самым близким, что я получил, был приведенный ниже запрос, однако каждый раз, когда в S2 есть результат, в котором есть сайт и завод, а не S1, вы получаете нулевые значения для S1 и S2.

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site
AND t1.plant = t2.plant

Ответы [ 2 ]

4 голосов
/ 22 октября 2011

Для выполнения этого запроса необходимы две хитрости.Первое ПОЛНОЕ СОЕДИНЕНИЕ.Полное объединение позволит вам объединить обе таблицы и вставить пустые значения в любую таблицу, если вы не соответствуете условию объединения.Вторым является COALESCE, который позволит вам взять завод и площадку из любой таблицы, в которой будет представлена ​​запись для этой строки в результатах.

1 голос
/ 22 октября 2011

Вы можете использовать coalesce . Он вернет первое ненулевое значение из параметров.

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...