从两个不同的表中加入两列

时间:2011-04-18 19:16:08

标签: sql-server sql-server-2005 tsql

我在连接两个不同表中的两列时遇到问题。

场景是:我有一个包含11列的表A和另一个包含6列的表B.

两个表中都存在列名SAMPLE1。但是,来自第一个表A的SAMPLE2和来自第二个表B的ABC具有相同的值但具有不同的列名。与SAMPLE3和DEF相同。现在我想将这些列连接到一个列(由两个表中的数据组成),其余列也应该出现在该最终表中。

示例:

表A

SAMPLE1    SAMPLE2    SAMPLE3 .........SAMPLE 11 (Total 11 columns in this table)

 US          75.2       US1_US           NULL

 INDIA       71         I3_INDIA         NULL

 UK          1851.23    UK1_UK           NULL

表B

SAMPLE1      ABC         DEF............. XYZ (Total 6 columns in this table)

CHINA        123.2       C1_CHINA         2

JAPAN        1.1         J1_JAPAN         2

GERMANY      10.2314     G1_GERMANY       2

SINGAPORE    100.22      S1_SINGAPORE     2

现在我希望看到这样的输出:

SomeTable

SAMPLE1      SOMENAME1    SOMENAME2..SAPMLE 11   ABC    DEF .....  SOMENAME3   

   US         75.2        US1_US      NULL       NULL    NULL      NULL

   INDIA      71          I3_INDIA    NULL       NULL    NULL      NULL 

   UK         1851.23     UK1_UK      NULL       NULL    NULL      NULL 

   CHINA      123.2       C1_CHINA    NULL       NULL    NULL       2   

   JAPAN      1.1         J1_JAPAN    NULL       NULL    NULL       2 

   GERMANY    10.2314     G1_GERMANY  NULL       NULL    NULL       2   

   SINGAPORE  100.22     S1_SINGAPORE NULL       NULL    NULL       2 

简而言之:

选择 (SAMPLE1(来自表A)+ SAMPLE1(来自表B))AS SAMPLE1, (SAMPLE2 + ABC)AS SOMENAME1, (SAMPLE3 + DEF)作为SOMENAME2,  A.SAMPLE4,A.SAMPLE5,..., B.GHI,B.JKL,...... (A.SAMPLE11 + B.XYZ)作为SOMENAME3

我使用了联盟,但没有用。

select SAMPLE1,SAMPLE2,SAMPLE3,...,SAMPLE 11 from TABLE A
UNION 
SELECT SAMPLE1, ABC, DEF, ...., XYZ FROM TABLE B

现在我收到了错误消息:

  

Msg 205,Level 16,State 1,Line 1

     

所有使用UNION组合的查询,   INTERSECT或EXCEPT运算符必须具有   相同数量的表达式   他们的目标清单。

我使用了union,coalesce,full outer join(以下所有建议或答案)

请帮我写代码。实际上我需要在select语句中使用该代码。也可以使用临时表或case语句等。

谢谢, Shashra

3 个答案:

答案 0 :(得分:2)

您可能正在寻找join,例如:

select  a.sample1
,       a.sample2
,       b.abc
,       b.def
...  etc  ...
from    TableA as a
full outer join
        TableB as b
where   a.sample1 = b.sample1

答案 1 :(得分:2)

使用FULL OUTER连接两个表(保留两个表中不存在的数据),然后使用COALESCE从任何表中获取公共SAMPLE1列。

SELECT COALESCE(A.SAMPLE1, B.SAMPLE1) SAMPLE1,
     A.SAMPLE2,
     A.SAMPLE3,
     ...
     A.SAMPLE11,
     B.ABC,
     B.DEF,
     ...
     B.XYZ
FROM table1 A FULL OUTER JOIN table2 B on A.SAMPLE1 = B.SAMPLE1

参考文献:MSDN - Using Outer Joins / COALESCE

答案 2 :(得分:0)

尝试使用它

表1包含5列

  

从table1中选择col1,col2 ... col5

表2包含3列

从table1中选择col1,col2,col3

查询

从table1中选择col1,col2,col3,col4,col5 联盟 从table1

中选择col1,col2,col3,'',''