将三个不同表中的列合并为一个列

时间:2015-06-11 19:15:49

标签: sql sql-server-2012

我是SQL的新手,我不确定Google会怎么做。我有三个不同列数的表。我想将以下三个表组合成一个列(没有重复)。

表1

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

表2

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
...

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用+组合它们(可能需要cast int s 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 :(得分:1)

您希望Google使用的字词为:UNIONCONCAT

  

注意:SQL Server 2012的早期版本不支持CONCAT。

为了获得预期的输出,我会这样做:

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