2011-04-18 121 views
3

我在加入两个不同表格的两列时遇到了问题。加入来自两个不同表格的两列

方案是:我有一个表A有11列,另一个表B有6列。

在这两个表中都存在一个列名称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 

简而言之:

SELECT (SAMPLE1(来自表A)+ SAMPLE1(来自表B))AS SAMPLE1, (SAMPLE2 + ABC)AS SOMENAME1, (样本3 + DEF)AS SOMENAME2, A.SAMPLE4,A.SAMPLE5,..., B.GHI,B.JKL,... (A.SAMPLE11 + B.XYZ)AS 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

All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.

我用联合,合并,全外连接(所有的建议或以下的答案)

请帮我在写作代码。其实,我需要在select语句中使用的代码。也可以用临时表或case语句等

感谢, Shashra

回答

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 
+0

COL3但是这只会从左表中得到所有数据,这意味着我现在不想要的表A.我想要表A和表B中的所有列,但表A和表B中的唯一列(sample1)应合并到一个列中。 – Shahsra 2011-04-18 19:51:09

+0

@Shahsra:这是一个[完整的外连接](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html),回答编辑 – Andomar 2011-04-18 20:11:18

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

+0

它的工作,但给我百万条记录。我想它在这种情况下使用交叉连接。 – Shahsra 2011-04-19 15:51:55

0

尝试此它可能有用

表1包含5列

select col1,col2...col5 from table1

表2含有3个柱

选择COL1,COL2,从表1

查询

选择COL1,COL2,COL3,COL4,从表1 COL5 工会 选择COL1,COL2,从表1 COL3, '', ''

+0

感谢您回复我,但不工作。 – Shahsra 2011-04-19 15:18:25