1

3 つの異なるテーブルから特定の値を取得したい。各テーブルの構造は同じですが、1 年の異なる期間のデータが含まれています。

Temp_Table_Jun (Contains data for June month)
---------------
CustNo    CustName  Revenue
1000      John      5.55   

同様に、さらに2つのテーブルがあります

  • Temp_table_Apr
  • Temp_table_May

今、私はクエリを実行します

select sum(Revenue)Rev_June from Temp_Table_Jun where CustNo='1000' 

6月の結果を取得します。今私の問題は、1 つのクエリですべての月の収益の詳細を取得することです。

次のようなものが必要です(これは間違っていて機能しません)

select Rev_June,Rev_Apr,Rev_May,((Rev_June+Rev_Apr+Rev_May)/3)Avg_3_Mon from 
(
        select sum(Revenue)Rev_June from Temp_Table_Jun where CustNo='1000',
        select sum(Revenue)Rev_Apr from Temp_Table_Apr where CustNo='1000',
        select sum(Revenue)Rev_May from Temp_Table_May where CustNo='1000'   

)

これはどのように達成できますか?Oracle 10g を使用しています。

4

3 に答える 3

5

データを取得するには、次の方法で実行できます。Oracle 10g には がありませんが、ステートメントをPIVOT使用して機能を複製できます。CASE

SELECT sum(case when month = 'June' then Rev END) June
  , sum(case when month = 'May' then Rev END) May
  , sum(case when month = 'April' then Rev END) April
  , avg(Rev) as Average
FROM
(
  SELECT sum(revenue) Rev, 'June' as Month from rev_june where cust_no = '1000'
  union all
  SELECT sum(revenue) Rev, 'April' from rev_apr where cust_no = '1000'
  union all
  SELECT sum(revenue) Rev, 'May' from rev_may where cust_no = '1000'
) x

デモで SQL Fiddle を参照してください

または、次の操作を実行できます。

SELECT June, April, May, (June + April + May)/3 as Average
FROM
(
  select 
    (SELECT sum(revenue) from rev_june where cust_no = '1000') as June
  , (SELECT sum(revenue) from rev_apr where cust_no = '1000') as April
  , (SELECT sum(revenue) from rev_may where cust_no = '1000') as May
  from dual
) x

デモで SQL Fiddle を参照してください

于 2012-07-29T16:33:41.493 に答える
3

以下はうまくいくかもしれません:

select Rev_June, Rev_Apr, Rev_May,
    (Rev_June + Rev_Apr + Rev_May) / 3 Avg_3_Mon
from (
    (select sum(Revenue) from Temp_Table_Jun where CustNo='1000') as Rev_June,
    (select sum(Revenue) from Temp_Table_Apr where CustNo='1000') as Rev_Apr,
    (select sum(Revenue) from Temp_Table_May where CustNo='1000') as Rev_May
    from dual
)
于 2012-07-29T15:14:03.837 に答える
1

Oracle 10g で機能するかどうかはわかりませんが、おおよそ次のような UNION クエリは、私が使用したデータベースでは通常機能します。

select sum(Revenue) Rev_June from Temp_Table_Jun where CustNo='1000'
UNION
select sum(Revenue) Rev_Apr from Temp_Table_Apr where CustNo='1000'
UNION
select sum(Revenue) Rev_May from Temp_Table_May where CustNo='1000'

句読点についてはっきりとはわかりません-最後にセミコロンが必要ですか?-しかし、それはあなたを始めるかもしれません。

UNION クエリが機能するには、各クエリが同じ構造を持っている必要があるため、少し異なる方法で行うと思います。

select sum(Revenue) Revenue_Sum, 'Jun' Month from Temp_Table_Jun where CustNo='1000'
UNION
select sum(Revenue) Revenue_Sum, 'Apr' Month from Temp_Table_Apr where CustNo='1000'
UNION
select sum(Revenue) Revenue_Sum, 'May' Month from Temp_Table_May where CustNo='1000'

これでは、平均合計と探している 3 つの列を取得できませんが、おそらく、この UNION クエリのようなもので VIEW を作成し、その VIEW で GROUP BY クエリを使用してデータを集計できます。

于 2012-07-29T14:59:02.067 に答える