2011-04-18 117 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