oracle中有多个SELECT

Nir*_*lam 1 sql oracle10g

我想从3个不同的表中获取特定值.每个表具有相同的结构,但包含一年中不同时期的数据.

Temp_Table_Jun (Contains data for June month)
---------------
CustNo    CustName  Revenue
1000      John      5.55   
Run Code Online (Sandbox Code Playgroud)

我还有两张桌子

  • Temp_table_Apr
  • Temp_table_May

现在我运行一个查询

select sum(Revenue)Rev_June from Temp_Table_Jun where CustNo='1000' 
Run Code Online (Sandbox Code Playgroud)

得到六月的结果.现在我的问题是我想在一个查询中获得所有月份的收入详细信息.

我需要类似的东西(这是错误的,不起作用)

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'   

)
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标?我正在使用Oracle 10g.

Tar*_*ryn 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
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

或者您可以执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo