объединить строку с двумя столбцами в sql server

#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() в указанном порядке.

SQLFiddle для тестирования.

Ответ №3:

 select t1.col1,t2.col as'col2' from table1 t1,table2 t2