2013-05-13 4 views
2

У меня есть следующая задача: у меня есть две таблицы столбцов в процедуре, и у обоих из них одинаковое количество строк. Я хотел бы «объединить» их, чтобы получить итоговую таблицу с двумя столбцами. У меня там есть простой способ?TSQL - Объединить две таблицы

В худшем случае я мог бы попытаться добавить первичный ключ и использовать INSERT INTO ... SELECT с JOIN, но для этого требуются довольно большие изменения в коде, который у меня уже есть, поэтому я решил спросить вас, ребята.

Как раз пояснить мой ответ ниже, вот пример. У меня есть следующие таблицы:

tableA 
col1 
---- 
1 
2 
3 
4 

tableB 
col2 
---- 
a 
b 
c 
d 

Resulting table: 
col1 | col2 
1 | a 
2 | b 
3 | c 
4 | d 
+0

Как раз пояснить мой ответ ниже. У меня есть следующие таблицы: – Moby04

+0

В общих условиях собрания это «zip» из двух коллекций. (Подумайте об этом, как молния на куртке, а не в сжатом файле.) Реализации .NET и Ruby этой концепции даже называются «Zip». – GalacticCowboy

ответ

9

Вы можете сделать это:

SELECT t1.col1, t2.col1 AS col2 
INTO NewTable 
FROM 
(
    SELECT col1, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RN 
    FROM table1 
) AS t1 
INNER JOIN 
(
    SELECT col1, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RN 
    FROM table2 
) AS t2 ON t1.rn = t2.rn 

Это создаст совершенно новую таблицу NewTable с двумя колоннами из двух таблиц:

| COL1 | COL2 | 
--------------- 
| 1 | a | 
| 2 | b | 
| 3 | c | 
| 4 | d | 

Посмотри в действии:

+0

Не совсем. У них нет прямого отношения (оба имеют только один столбец с разными значениями), но я знаю, что первая строка относится к первой строке, второй - ко второй и т. Д. Я знаю, что это легко с циклом CURSOR или WHILE, но из-за эффективности я не могу его использовать. Что касается JOIN, мне нужно будет добавить столбец первичного ключа, который я бы хотел избежать ... – Moby04

+0

@ Moby04 - ОК, извините. См. Мое редактирование. Предполагая, что они имеют одинаковое количество строк. –

+0

Я проверю это прямо утром, но кажется многообещающим. Спасибо :) – Moby04

Смежные вопросы