2015-06-11 8 views
2

Я новичок в SQL, и я не уверен, что делать с Google. У меня три таблицы с разным количеством столбцов. Я хотел бы объединить эти три таблицы в один столбец (без дубликатов).Объединить столбцы из трех разных таблиц в один столбец

Таблица1

Col1   Col2   Col3 
1    a    aa 
2    b    ab 
3    c    bb 

Table2

Col1   Col2 
123   Test 
456   Test2 
346   Test3 

Таблица3

Col1   Col2  Col3  Col4 
5695   93234  ABC  CDE 
4534   92349  MSF  KSK 
3244   12323  SLE  SNE 

Ожидаемый результат:

FileOutput 
1aaa 
123Test 
569593234ABCCDE 
2bab 
456Test2 
453492349MSFKSK 
... 

Любая помощь будет оценена. Благодаря!

+0

так что вы хотите, чтобы столбцы каждой таблицы были объединены в одну строку, а затем вы хотите объединить все строки из всех таблиц, чередующихся таблиц в каждой строке? (И как вы ожидаете, что что-то будет сортироваться?) – Amit

+0

Да, я не беспокоюсь о заказе. Но они должны были быть объединены в один вывод столбца. –

ответ

1

Термин, который вы хотите использовать в Google, будет: UNION и CONCAT.

Примечание: CONCAT не поддерживается в предыдущих версиях для SQL Server 2012.

Чтобы получить ваш ожидаемый результат, я хотел бы сделать это:

select 
    concat(cast(col1 as varchar(10)),col2,col3) as FileOutput 
from table1 
UNION 
select 
    concat(cast(col1 as varchar(10)),col2) as FileOutput 
from table2 
UNION 
select 
    concat(cast(col1 as varchar(10)),cast(col2 as varchar(10)),col3,col4) as FileOutput 
from table3 

SQL Fiddle Demo

+0

@TabAlleman. , , Это отвечает на вопрос, и нет необходимости, чтобы подзапросы возвращали разные числа столбцов. –

+0

комментарий удален, забыл о CONCAT –

+0

Это отлично работает! ....Спасибо @Nepali Rookie –

1

Не знаю, как вы бы анализировать данные, но вы можете сделать это:

select convert(varchar(100), col1) + convert(varchar(100), col2) + convert(varchar(100), col3) as fileOutput 
from table1 
union all 
select convert(varchar(100), col1) + convert(varchar(100), col2) as fileOutput 
from table2 
union all 
select convert(varchar(100), col1) + convert(varchar(100), col2) + 
convert(varchar(100), col3) + convert(varchar(100), col4) as fileOutput 
from table4 

примечание не зная ваши типы данных столбцов, ваш VARCHAR (100), возможно, потребуется расширить, или потенциально может сокращаться в зависимости от ваши данные.

1

Вы можете комбинировать их с помощью + (может потребоваться cast ваши int с, как varchar s для этой работы), а затем поместить их все в одной таблице, используя union all. Пример:

Select cast(col1 as varchar(100)) + col2 + col3 
from Table1 
union all 
select cast(col1 as varchar(100)) + col2 
from Table2 

т.д.

Примечание: обязательно используйте union all, а не union если вы хотите сохранить какие-либо дубликаты вы можете создать.

+2

Это было бы правильно, если бы вы дали 'varchar' приятную длинную длину. Никогда не используйте 'varchar()' в SQL Server без параметра длины. Длина по умолчанию зависит от контекста; он может быть недостаточно большим; и возникающие ошибки трудно найти. –

+0

Спасибо @ Gordon - отредактирован. – APH

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