2015-04-01 178 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

相關問題