2012-04-13 53 views
1

不可用我的新手爲sql從不同的表中提取數據,如果相關數據表中的

我有[月],[預測平均一表1。溫度]作爲列。我有另一個table2與[月],[實際平均。溫度]作爲列。現在在某些日期,表1中沒有可用的記錄。在這種情況下,如果我在該表中有可用記錄,我想從表2中提取記錄。

例如,表1可能具有從四月到十二月的一年的記錄,如2010年。表2具有1月至2010年的十月的記錄。我想從表2中獲取表1中mising jan,feb,mar月記錄的記錄。

任何想法。我們正在使用sql server 2008

在此先感謝。

回答

2
select 
    [month], isnull([forecasted avg. temperature], [actual avg. temperature]) as temperature 
from 
    table2 left outer join table1 on table1.[month] = table2.[month] 

UPDATE 根據註釋來自民主黨,我改變了查詢。原始帖子使得它聽起來好像table2包含所有月份的數據,所以不是一個FULL JOIN,我只是切換,所以它將從table2中提取所有記錄,並且如果可用於table1,則繼續使用ISNULL作爲temp。如果table2不包含所有數據,則需要一個FULL JOIN。

+1

+0:「JOIN」與我所想的OP最接近(儘管它有點不明確):從T1如果存在,則給出T2的值。但是你需要一個'FULL OUTER JOIN' *(如果T1中沒有行,你的回答沒有任何要加入的T2)*。然後你需要在兩個字段上都是ISNULL()。 – MatBailie 2012-04-13 15:57:42

+0

這是一個有趣的側面思考。我會把它放在我的狡猾的計劃盒子裏。 – 2012-04-13 16:24:48

2
select [month], [forecasted avg. temperature] as temperature from table1 
union 
select [month], [actual avg. temperature] as temperature from table2 
+0

如果月份在兩個表中,將會拉出兩個不同的臨時工。 – 2012-04-13 15:52:24

+0

請注意,這種情況並未明確提及。 – 2012-04-13 15:53:59

+0

如果月份在兩個表中,將會拉出兩個不同的臨時工。確實如此。現在,如果有兩個來自兩個表的重複值,那麼我只需要保留表1中的溫度值。 – user1176058 2012-04-13 18:40:08

0

一種方式是使用外部聯接查詢

Select [month], [forecasted avg. temperature] from Table1 
Union 
Select [month], [actual avg. temperature] From Table2 
outer join Table1 on Table1.[Month] = Table2.Month 
Where Table1.Month is null 

了我的頭頂部的工會,併爲Cthulu的緣故,給你的表和列法定名稱。

如果你想在輸出更加友好的名字做類似

Select ForeCastAvgTemp As [forecasted avg. temperature] From Table1 
相關問題