首页 > 解决方案 > Oracle 中的结果集与 Union

问题描述

我在 Oracle SQL 中与两个查询进行了联合

SELECT account_number, SUM(amount_settled)    
  FROM table W
 WHERE account_number= &acc
   AND Component = 'PROFIT_1'
 GROUP BY account_number
 UNION 
SELECT account_number, SUM(amount)  
  FROM table S
 WHERE account_number=  &acc
   AND amount_tag= 'PROFIT_2' 
 GROUP BY account_number 
 ORDER BY account_number 

我在结果集中得到了一个低于另一个的价值

SUM(AMOUNT_SETTLED)
1   36260.16
2   36342.16

我想在另一排旁边显示单行

SUM(AMOUNT_SETTLED)       SUM(E.AMOUNT)
36260.16                  36342.16

如何在 Oracle 中使用两个不同的表来实现这一点

标签: sqloraclegroup-byoracle11g

解决方案


似乎这是您当前的情况(没有包含替换变量的行):

SELECT account_number, SUM(amount_settled)    
  FROM table1 t1
 WHERE component = 'PROFIT_1'
 GROUP BY account_number
 UNION 
SELECT account_number, SUM(amount)  
  FROM table2 t2
 WHERE amount_tag= 'PROFIT_2' 
 GROUP BY account_number   

并且您可能需要CROSS JOIN通过使用条件聚合在从每个表中单独派生的子查询中使用:

SELECT sum_amount_settled, sum_amount
  FROM ( SELECT SUM(CASE WHEN component = 'PROFIT_1' THEN amount_settled END) AS sum_amount_settled   
           FROM table1) 
 CROSS JOIN ( SELECT SUM(CASE WHEN amount_tag = 'PROFIT_2' THEN amount END) AS sum_amount  
                FROM table2)   

Demo


推荐阅读