SQL Oracle-将两个结果集合并为一个

时间:2012-09-18 19:29:28

标签: sql oracle

我有以下疑问:

Select TRUNC(create_dtime) as Day, Count(Create_Dtime) As SinS_Tot
  From player_chkin_hist
 Where Product_Id Is Not Null
   And Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
   And Trunc(Create_Dtime) < To_Date('2012-sep-19','yyyy-mon-dd')
 Group By Trunc(Create_Dtime)
 Order By 1 Asc

Select TRUNC(Create_Dtime) As Day, Count(Create_Dtime) As Sins_Tot
  From Player_Chkin
 where Product_Id Is Not Null
   And Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
   And Trunc(Create_Dtime) < To_Date('2012-sep-19','yyyy-mon-dd')
 Group By Trunc(Create_Dtime)
 Order By 1 Asc

查询1结果:

Day          SinS_Tot
01-Sep-12      10000
02-Sep-12       9000

查询两个结果:

 Day          SinS_Tot
03-Sep-12      11500
04-Sep-12       9800

有没有一种简单的方法来组合这两个查询,以便我看到所有数据?我想过使用连接,但由于日期不重叠,所以没有什么可以设置内部连接相等。

4 个答案:

答案 0 :(得分:1)

您要找的是UNION(或UNION ALL,具体取决于您是否要删除重复项:)

Select 
trunc(create_dtime) as Day, Count(Create_Dtime) As SinS_Tot
From player_chkin_hist
Where
Product_Id Is Not Null And
Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
And Trunc(Create_Dtime) < To_Date('2012-sep-19','yyyy-mon-dd')
Group By Trunc(Create_Dtime)

UNION

Select Trunc(Create_Dtime) As Day, Count(Create_Dtime) As Sins_Tot
From Player_Chkin
where
Product_Id Is Not Null And
Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
And Trunc(Create_Dtime) < To_Date('2012-sep-19','yyyy-mon-dd')
Group By Trunc(Create_Dtime)
Order By 1 Asc

答案 1 :(得分:1)

你可以UNION ALL两个结果

<<query 1>>
UNION ALL
<<query 2>>

您也可以使用UNION,但这会更昂贵,因为它会强制Oracle查找并消除重复的行。如果你知道这两个查询永远不会返回同一行,或者你想要两个行,那么这是不必要的开销。

答案 2 :(得分:0)

他们之间可能有一个UNION吗?将ORDER BY保留在查询之外,将其放在第二个

的末尾
Query1
 UNION
Query2

答案 3 :(得分:0)

您只需要使用UNION组操作符。

[查询1] UNION ALL    [QUERY2]