Объедините два запроса, сохранив все результаты - PullRequest
0 голосов
/ 11 марта 2020

У меня есть две таблицы, и я должен объединить результаты, сохраняя все результаты в одном наборе данных.

Я пытался с различными объединениями, но ничего не возвращает результат.

Мне нужен запрос для SQL Доступ к серверу и MS.

Пример:

TAB_A

+---------------------+------+
|       DATAORA       |  P1  |
+---------------------+------+
| 02/05/2020 15:00:30 | 100  |
| 02/05/2020 15:15:30 | 200  |
| 02/05/2020 15:30:30 | 300  |  
| 02/05/2020 15:45:30 | NULL |
| 02/05/2020 16:00:30 | 500  |
+---------------------+------+

TAB_B

+---------------------+------+
|         ORA         |  P2  |
+---------------------+------+
| 02/05/2020 15:00:30 | 600  |
| 02/05/2020 15:16:30 | 700  |
| 02/05/2020 15:40:30 | NULL |  
| 02/05/2020 15:45:30 | 800  |
| 02/05/2020 15:59:30 | 900  |
+---------------------+------+

РЕЗУЛЬТАТ

+---------------------+------+------+
|       DATAORA       |  P1  |  P2  |
+---------------------+------+------+
| 02/05/2020 15:00:30 | 100  | 600  |
| 02/05/2020 15:15:30 | 200  | NULL |
| 02/05/2020 15:16:30 | NULL | 700  |
| 02/05/2020 15:30:30 | 300  | NULL |
| 02/05/2020 15:40:30 | NULL | NULL |
| 02/05/2020 15:45:30 | NULL | 800  |
| 02/05/2020 15:59:30 | NULL | 900  |
| 02/05/2020 16:00:30 | 500  | NULL |
+---------------------+------+------+

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Что вы описываете это full join. Если ваша СУБД поддерживает это, тогда логика c:

select time, a.p1, b.p2
from ( ... query A ...) a
full join ( ... query B ...) b using(time)

Обратите внимание, что это предполагает, что оба запроса возвращают столбец с именем time, что упрощает синтаксис.

Если ваша база данных не поддерживает full join s, вы можете использовать union all и агрегирование:

select time, max(p1) p1, max(p2) p2
from (
    select time, p1, null from (... query A ...)
    union all select time, p1, null from (... query B ...)
) t
group by time
2 голосов
/ 11 марта 2020

Как насчет PIVOT

Пример

Select *
 From  (
        Select DATAORA,P1,Item = 'P1' From Tab_A
        Union All
        Select ORA    ,P2,Item = 'P2' From Tab_B
       ) src
 Pivot (sum(P1) for Item in ([P1],[P2]) ) pvt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...