Добавить два разных результата запроса в одну таблицу
У меня есть два разных запроса (с одинаковым количеством столбцов в результате). Я хочу положить оба в одну таблицу.
например у меня есть следующая таблица:
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