1

我是 sql 新手

我有一个 [month] 的 table1,[forecasted avg. 温度]作为列。我有另一个带有 [month]、[actual avg. 温度]作为列。现在对于某些日期,表一中没有可用的记录。在这种情况下,如果该表中有可用记录,我想从 table2 中提取记录。

例如,表 1 可能包含 2010 年 4 月至 12 月的记录。表 2 包含 2010 年 1 月至 12 月的记录。我想从表 2 中提取表 1 中缺失的 jan、feb、mar 月份的记录。

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

提前致谢。

4

3 回答 3

2
select [month], [forecasted avg. temperature] as temperature from table1
union
select [month], [actual avg. temperature] as temperature from table2
于 2012-04-13T15:46:29.340 回答
2
select 
   [month], isnull([forecasted avg. temperature], [actual avg. temperature]) as temperature 
from 
   table2 left outer join table1 on table1.[month] = table2.[month]

更新来自 Dems 的每条评论,我更改了查询。原来的帖子听起来好像 table2 包含所有月份的数据,所以我只是切换了,而不是 FULL JOIN,所以它将从 table2 中提取所有记录,并在 table1 可用时加入,继续使用 ISNULL 作为临时。如果 table2 不包含所有数据,则需要 FULL JOIN。

于 2012-04-13T15:51:55.580 回答
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

在我的脑海中,为了克苏鲁的缘故,给你的表和列合法的名字。

如果您想在输出上使用更友好的名称,请执行以下操作

Select ForeCastAvgTemp As [forecasted avg. temperature] From Table1
于 2012-04-13T15:51:29.913 回答