2016-04-19 56 views
2

我的問題用SQL Server中的鍵替換。任何人都可以給我一個查詢來做到這一點?在SQL Server的2表中用鍵替換數據

感謝您的回答!

Table1

ID | Code | Des | more columns 
    ---+------+-----+------------- 
    1 | 100 | a | ... 
    2 | 200 | b | ... 
    3 | 300 |data3| ... 

Table2

ID | Code | Des 
    ---+------+------ 
    1 | 100 | data1 
    2 | 200 | data2 

的結果必須是這樣的:

ID | Code | Des | more columns 
    ---+------+-----+------------- 
    1 | 100 |data1| ... 
    2 | 200 |data2| ... 
    3 | 300 |data3| ... 
+0

提示:'內join'。 –

+0

目前還不清楚你想要什麼。結果中的'Des'列是否應報告第二個表中的相應值? –

+0

@RobertKock如果代碼在2表中共同存在,Des的值來自表2,但如果代碼在2表中不常見,則Des的值來自表1 –

回答

2

做一個LEFT JOIN,如果沒有table2.Des值,取table1.Des代替:

select t1.ID, t1.Code, coalesce(t2.Des, t1.Des), t1.more Column 
from table1 t1 
left join table2 t2 on t1.code = t2.code 

或者,也許你想這樣的:

select * from table2 
union all 
select * from table1 t1 
where not exists (select 1 from table2 t2 
        where t2.code = t1.code) 

iee返回table2行,並且如果代碼在table1中但不在table2中,也返回該行。

+2

應該是'coalesce(t2.Des, t1.Des)'而不是'coalesce(t2.Des,t2.Des)' – Wanderer

+2

@Ullas,謝謝!糾正。 – jarlh

+0

@jarlh謝謝你的回答,對我的工作 –

2

使用JOIN

查詢

SELECT t1.ID, t1.Code, 
CASE WHEN t1.Des LIKE 'data%' THEN t1.Des ELSE t2.Des END AS Des 
FROM Table1 t1 
LEFT JOIN Table2 t2 
ON t1.ID = t2.ID; 
0

好的,所以你需要Table1的所有結果,但是當它可以從Table2中使用'Des'中的值?你會想要做這樣的事情;

SELECT a.ID 
    ,b.Code 
    ,ISNULL(b.Des,a.Des) AS Des 
FROM Table1 a 
LEFT JOIN Table2 b ON a.ID = b.ID 
2

試試這個:

SELECT   Table1.ID, 
       Table1.Code, 
       ISNULL(Table2.Des, Table2.Des) AS Des 
FROM   Table1 
LEFT OUTER JOIN Table2 
      ON Table1.Code = Table2.Code; 

你說: 「如果在2臺通用代碼」 等的代碼加入,而不是在ID