2016-05-23 183 views
-2

我有很多費用列的每個關鍵 表A優化Oracle查詢

SK1 SK2 Col1中col2的COL3 ..... Col50 FLG(Y/N)


1 2 10 20 30 ...... 500 Y 
1 2 10 20 30 ...... 500 N 
2 2 10 20 30 ...... 500 N 

我需要聚合所有值(總和),然後檢查是否有任何值與Y然後將它們添加到新的tableB。 這裏應該返回表格A(sk1,sk2)的記錄組合(1,2)。

我寫的查詢是選擇所有列的lisr並添加爲組。 我們有很多數據,所以這個查詢需要很長時間才能運行。任何機會重新考慮這一點,並儘可能加快速度。

選擇 SK1,SK2 , NVL從表A(總和(COL3),0), NVL(總和(COL4))0, ..... NVL(總和(col50)) group by Sk1, Sk2

Iam將此作爲大型查詢的一部分,其中許多其他計算都在此之上執行。

+1

而你的問題是? –

+0

我編輯了我的問題。讓我知道你是否需要更多細節。 – waiting

回答

-1

如果您使用此作爲大型查詢的一部分,您嘗試使用WITH選項嗎?

這可能是這樣的

WITH SUM_DATA AS (select col1, col2, nvl(sum(col3),0), nvl(sum(col4))0, ..... nvl(sum(col50)) from table A group by col1, col2) 

SELECT xyz 
FROM abc, sum_data 
WHERE abc.join_col = sum_data.join_col 

更多help here

+0

如果WITH子句只被引用一次,爲什麼會有幫助? –

0

工作的任何一個分組的記錄集是否包含一個「Y」是那樣簡單......

select ... 
from  ... 
group by ... 
having max(flg) = 'Y' 
+0

這隻會給我那些具有Y的值,我必須計算所有值的總和,然後僅顯示或採用那些爲Y的值 – waiting

+0

在應用聚合之後,having子句將過濾器應用於查詢結果,而不是輸入行。因此它將返回所有源行的flg的最大值爲「Y」的聚合行。 –

0

現在我已經創建了一個臨時表並將所有數據加載到它中。