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

У меня есть два разных запроса (с одинаковым количеством столбцов в результате). Я хочу положить оба в одну таблицу.

например у меня есть следующая таблица:

id     country     salary 
1        us        10000

2        uk        25000

3        us        35000

4        uk        31000

5        uk        26000

Теперь у меня есть следующие запросы:

Запрос 1:

select * from table where country='us';

а также

Запрос 2:

select * from table where country='uk';

у меня есть одна финальная таблица с шестью столбцами, такими как:

 id1   |country1  |  salary 1 |  id2  |  country2 |  salary2

Теперь я хочу поместить оба запроса в эту таблицу, поэтому должен быть показан следующий вывод:

Желаемый результат:

id1   |country1  |  salary 1  |  id2   |  country2 |  salary2 
 1    |     us   |   10000    |    2   |      uk   |   25000

 3    |     us   |   35000    |    4   |      uk   |   31000

null  |   null   |   null     |    5   |      uk   |   26000

Я пробовал это, но это не объединяет результат:

insert into table (id1,country1,salary1)
select id,country,salary
from table1
where country='us';

а также

insert into table (id2,country2,salary2)
select id,country,salary
from table1
where country='uk';

но это дает следующий результат:

id1   |country1    |  salary 1  |  id2      |  country2   |  salary2 
 1    |     us     |     10000  |     null  |     null    |     null

3     |    us      |    35000   |    null   |    null     |    null

null  |   null     |   null     |   2       |    uk       |    25000

null  |   null     |   null     |   4       |    uk       |    31000

null  |   null     |   null     |   5       |    uk       |    26000

Пожалуйста, помогите мне:

1 ответ

Решение

Если ваша СУБД поддерживает оконные функции, вы можете использовать их, чтобы соответствующим образом присоединиться к промежуточному результату.

select t1.id, t1.country, t1.salary, t2.id, t2.country, t2.salary
from
(
  select *, row_number() over (order by id) rn
  from data
  where country = 'us'
) t1
full join
(
  select *, row_number() over (order by id) rn
  from data
  where country = 'uk'
) t2 on t1.rn = t2.rn

демонстрация

РЕЗУЛЬТАТ

id      country salary  id  country salary
-------------------------------------------
1       us      10000   2   uk      25000
3       us      35000   4   uk      31000
null    null    null    5   uk      26000
Другие вопросы по тегам