2015-04-01 110 views
0

我有多个由UNION ALLs嵌套在一起的查询;一些内部查询几乎相同。将两个几乎相同的UNIONed查询合并为一个

例如

select sum(x.amount) as amnt, 'txt1' as name, x.cfg as cfg from tbl1 
union all 
select -sum(x.amount) as amnt, 'txt2' as name, x.cfg as cfg from tbl1 

结果:

AMNT|NAME|CFG 
----+----+--- 
12 |txt1| Z 
-12 |tst2| Z 

由于内部查询不小,并结合去了很多表本身我想节省处理时间和资源将这两个内部查询合并为一个。考虑到NAME(txt1/txt2)位于内部查询而不是表格

+0

这只是一个SELECT语句,或者您是否将此数据插入到表中? – 2015-04-01 16:08:42

回答

1

对于此特定示例,您需要使用某些条件逻辑复制返回的结果。如果将条件逻辑放入CTE中,然后对主表执行笛卡尔连接,则主表中的每一行都将被连接中的记录数复制。在这种情况下,这将是2.

with multiplier (m, name) as (
select 1, 'txt1' from dual 
    union all 
select -1, 'txt2' from dual 
     ) 
select multiplier.m * sum(t.amount), multiplier.name, t.cfg 
    from tbl1 t 
cross join multiplier 
+0

谢谢:)只是完美 – 2015-04-01 16:06:58

相关问题