Создайте выходную структуру, подобную A, объединяя две таблицы в нескольких полях. - PullRequest
0 голосов
/ 28 апреля 2019

Соединение двух таблиц с использованием двух полей с разными именами не работает

У меня есть две таблицы,

a: таблица с запросом по часам

-----------------------------------------
datetime        | customer | pastdemand | levelOfDetail |   
-----------------------------------------
04-01-2019 06:00 | 444111 | 100 | 6 |   
.........   
04-30-2019 18:00 | 444111 | 150 | 6 |   

здесь я могу иметь два уровня 6 или 24. Меня интересует только уровень = 6. Таблица b: журнал сохраненных будущих значений по клиенту.

-----------------------------------------
forecastdatetime        | custNumber | forecast | dateGenerated   
-----------------------------------------
04-30-2019 18:00 | 444111 | 120 | 04-29-2019 18:00   
..........   
05-01-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
05-02-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
05-03-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
05-04-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
05-05-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
........   

Запрос:

 SELECT a.[datetime],a.customer
  [demand]
  ,b.*

  FROM a
  full outer join b on a.customer=b.custNumber
  and a.datetime=b.forecastdatetime 

Я получаю результаты, которые похожи на левое соединение.

----------------------------------------------------
datetime| customer| pastdemand | forecastdatetime|custNumber|forecast| dateGenerated    
-----------------------------------------   

04-01-2019 06:00 | 444111 | 100 | 6 | NULL | NULL | NULL | NULL   
......   
04-30-2019 18:00 | 444111 | 150 | 6 | 04-30-2019 18:00 | 444111 | 120 | 04-29-2019 18:00   

Я хотел создать таблицу A U B, как и во всех значениях из значений A +, общих для A & B, на основе совпадения customer = custNumber и datetime = forecastdatetime для каждой сгенерированной даты. Ожидаемый результат:

 ----------------------------------------------------
    datetime| customer| pastdemand | forecastdatetime|custNumber|forecast| dateGenerated    
    -----------------------------------------   

    04-01-2019 06:00 | 444111 | 100 | 6 | NULL | NULL | NULL | NULL   
    04-02-2019 06:00 | 444111 | 100 | 6 | NULL | NULL | NULL | NULL   
    ......   
    04-30-2019 18:00 | 444111 | 150 | 6 | 04-30-2019 18:00 | 444111 | 120 | 04-29-2019 18:00   
    NULL | NULL |NULL | NULL | 05-01-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
    NULL | NULL |NULL | NULL | 05-02-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
    NULL | NULL |NULL | NULL | 05-03-2019 18:00 | 444111 | 140 | 05-01-2019 18:00   
    NULL | NULL |NULL | NULL |  ..........

Как вы заметили, я не получаю ту часть таблицы B, которая не распространена в A. Я понимаю, что для использования объединения имена полей должны быть одинаковыми, в данном случае это не так. Был бы рад обойти

1 Ответ

1 голос
/ 28 апреля 2019

После прочтения вашего вопроса и ваших мыслей в разделе комментариев кажется, что проблема не связана с синтаксисом SQL JOIN. Проблема связана с вызовом выбора, который вы делаете для столбцов -

SELECT * FROM a
FULL OUTER JOIN b ON a.customer = b.custNumber
and a.datetime = b.forecastdatetime 

Изменение сделано для получения всех столбцов, совпадающих и несоответствующих, используя select * ...

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