#sql #sql-server #sql-server-2008-r2 #sql-server-2012
#sql #sql-сервер #sql-server-2008-r2 #sql-server-2012
Вопрос:
у меня есть две таблицы, я хочу объединить эти данные в одну таблицу, как возможно, чтобы мои данные выглядели так,
table1 (col1 is column name)
col1
------------------
data1
data2
data3
data4
data5
table2 (col1 is column name)
col1
-----------------------
data5
data6
data7
expected Result
col1 and col2 are my columns
col1 col2
--------------------------
data1 data5
data2 data6
data3 data7
data4
data5
Комментарии:
1. SQL JOIN было бы моим первым предположением…
Ответ №1:
Вы можете сделать это, добавив join
ключ с помощью row_number()
:
select t1.col1, t2.col1 as col2
from (select col1, row_number() over (order by (select NULL)) as seqnum
from table1
) t1 full outer join
(select col1, row_number() over (order by (select NULL)) as seqnum
from table2
) t2
on t1.seqnum = t2.seqnum;
Примечание: порядок для двух столбцов не гарантируется таким же, как в вашем примере. Для указания порядка вам понадобится столбец. Если у вас есть только один столбец, то, похоже, это не так. Но это приведет к созданию двух столбцов, как в вашем вопросе.
Ответ №2:
SELECT col1, col2
FROM (
SELECT col1, ROW_NUMBER() OVER (ORDER BY col1) rn FROM table1
) a
FULL OUTER JOIN (
SELECT col1 col2, ROW_NUMBER() OVER (ORDER BY col1) rn FROM table2
) b
ON a.rn = b.rn
ORDER BY COALESCE(a.rn, b.rn);
Здесь — при отсутствии каких-либо других критериев сортировки — я упорядочиваю столбцы по их значению. Если у вас есть какие-то другие критерии сортировки, вам придется изменить ORDER BY
предложение, OVER()
чтобы отразить это. Ключ объединения генерируется динамически с помощью ROW_NUMBER() в указанном порядке.
Ответ №3:
select t1.col1,t2.col as'col2' from table1 t1,table2 t2