2016-11-06 33 views
1

我有表生:轉換2數據表一表

Year | Value1 | Value2 
2015 Good  Good 
2016 Bad  Good 
2017 Bad  Bad 

和表金錢:

Year | Money1 |Money2 
2014 100  200 
2015 300  null 
2018 500  500 

我想打一個TMP表如下所示: tmpTable

Year |Value1 |Value2 |Money1 |Money2 
2014 Null  Null  100  200 
2015 Good  Good  300  Null 
2016 Bad  Good  Null  Null 
2017 Bad  Bad  Null  Null 
2018 Null  Null  500  500 

我可以在SQL Server中做到這一點嗎?

+0

加入錢B與常規外之間的連接你可以得到那個結果 –

+0

s,用左連接你可以連接這兩個表 –

回答

0

如果兩個表中都需要Year,那麼可以在表Health和Money之間使用外連接。

0

它是SQL查詢,U可以參考這個

select A.Year,A.Value1,A.Value2, B.Money1,B.Money2 from Health A left join Money B on B.Year=A.Year 
+0

這並不是我想要的。表健康沒有年份(2014年和2018年)。如果我使用加入或類似Heath.Year = Money.Year的東西,我不會得到表健康和金錢 –

+0

所有的一年,你可以加入那些而不是一年的ID。 (爲了得到我用過的所有值,或者你可以使用一個更多的查詢並將它聯合起來 –

0

創建所需的表&使用連接查詢來填充數據。

create table tmpTable( Year data_type(size), Value1 data_type(size), Value2 data_type(size), Money1 data_type(size), Money2 data_type(size) );

insert into tmpTable (Year,Value1,Value2, Money1, Money2) select t1.Year, t1.Value1, t1.Value2, t2.Money1, t2.Money2 from Health t1 inner join Money t2 on t1.Year = t2.Year

1

使用2 LEFT連接和使用UNION到結果集無論從LEFT加入組合。

查詢

select t1.[Year], t1.[Value1], t1.[Value2], t2.[Money1], t2.[Money2] 
from [Health] t1 
left join [Money] t2 
on t1.[Year] = t2.[Year] 
union 
select t1.[Year], t2.[Value1], t2.[Value2], t1.[Money1], t1.[Money2] 
from [Money] t1 
left join [Health] t2 
on t1.[Year] = t2.[Year] 
order by 1; 

SQL Fiddle demo

0

我想你可以用全外做連接而不是左的加入。

選擇A.Year,A.Value1,A.Value2,B.Money1,B.Money2衛生完全外部的B.Year = A.Year