如何构建合并两个表的SQL查询?

时间:2013-04-16 14:27:39

标签: sql

所有的

有两张桌子,无论新旧。

[New] 
Machine Date 
A       Apr 16 
B       Apr 16 
A       Apr 15
C       Apr 15  
A       Apr 14 

[Old] 
Machine Date 
A       Apr 12 
B       Apr 10 
A       Apr 09 
C       Apr 08  
A       Apr 07 

我想带上前2机器的日期> 2009年4月

我可以为一个表构建查询,但不知道如何合并两个表。

select top 2 machine, count(machine)
from new
where date > "Apr 09"
group by machine

它将在一个语句中使用两个选择查询但不知道该怎么做。

任何人都可以为此提出建议吗?

2 个答案:

答案 0 :(得分:2)

如果您经常这样做,我建议您创建一个显示两个表的视图:

CREATE VIEW AllData AS
SELECT * FROM [New]
UNION ALL
SELECT * FROM [Old]

然后你可以从视图中选择并进行你想要的任何过滤:

select top 2 machine, count(machine)
from AllData
where date > "Apr 09"
group by machine

另外,我不确定你在这里展示的数据是否只是一个例子,但是我要小心你使用的日期格式 - 因为你是基于一个字符串过滤的,几乎一年中的每个日期都将满足该条件,包括“Jan 01”。要更新它,您可能需要考虑使用实际的日期类型。

答案 1 :(得分:1)

您似乎想要的查询是:

select top 2 machine, count(machine)
from ((select * from [New]
      ) union all
      (select * from [Old]
      )
     ) t
where date > "Apr 09"
group by machine
order by count(machine) desc

使用top时,您应始终拥有order by。否则,结果是不确定的。我猜你想要两个计数最高的人。