0

次のクエリがあります。

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

次の2つの結果をクエリします。

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

これら2つのクエリを組み合わせて、すべてのデータを表示する簡単な方法はありますか?結合を使用することを考えましたが、日付が重ならないため、内部結合を等しく設定することはできません。

4

4 に答える 4

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
于 2012-09-18T19:32:31.740 に答える
1

あなたUNION ALLは2つの結果を得ることができます

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

を使用することもできますが、UNIONOracleが重複行を検索して削除する必要があるため、コストが高くなります。2つのクエリが同じ行を返さないことがわかっている場合、または両方の行が必要な場合、これは不要なオーバーヘッドです。

于 2012-09-18T19:33:01.033 に答える
0

多分UNIONそれらの間?クエリの外側を保持しORDER BY、2番目のクエリの最後に配置します

Query1
 UNION
Query2
于 2012-09-18T19:32:40.940 に答える
0

UNIONグループ演算子を使用する必要があります。

[Query1] UNION ALL [Query2]

于 2012-09-18T19:34:27.463 に答える