2014-05-19 49 views
0

我有一些麻煩與此查詢:但是查詢不分組由什麼我想

NODE_ID    SUM(CVA.CVA) SUM(DVA.DVA) DEAL_NUMADM DEAL_NUMMAS 
MA10700_1731413  953180   1373440   22012  10700 
Master10700_1731413 4886330   4318999   0   10700 
MA10700_1731413  1654   1192   12054  10700 
MA10700_1731413  4    (null)   83442  10700 
MA10700_1731413  14    1093   10775  10700 
MA10700_1731413  963    (null)   10779  10700 

,我希望將這些行由DEAL_NUMMAS,所以:

select 
case 
    when d.deal_numadm!=0 and d.deal_numadm is not null 
     then 'MA' || d.deal_nummas || '_' || d.ntt_id 
    when d.deal_numadm=0 or d.deal_numadm is null 
     then 'Master' || d.deal_nummas || '_' || d.ntt_id 
end as node_id, 
sum(cva.cva), sum(dva.dva), d.deal_numadm, d.deal_nummas 
from acc_processed_cva cva 
left outer join acc_processed_dva dva on dva.deal_id = cva.deal_id 
join acc_deals d on d.deal_id = cva.deal_id and d.deal_scope='Y' 
join dt_runs r on r.run_id = cva.run_id and r.deal_cnt_id = d.deal_cnt_id 
where r.run_id=57 and d.deal_nummas=10700 and d.ntt_id = 1731413 
group by d.ntt_id, d.deal_nummas, d.deal_numadm, d.deal_cnt_id, d.ntt_id; 

它返回這些行我應該只有兩排。

我試圖消除在GROUP BY表達d.deal_numadm,但與此錯誤失敗:

ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression"

澄清

以上,DEAL_NUMADM只存在表明他們是返回的每一行都不相同。

我想是這樣的:

NODE_ID    SUM(CVA.CVA) SUM(DVA.DVA) DEAL_NUMMAS 
MA10700_1731413  955815   1375725   10700 
Master10700_1731413 4886330   4318999   10700 

與第一行是行1,3,4,5和6

我如何能實現我想要的結果的總和?

+1

「DEAL_NUMMAS」中只有一個值,您爲什麼期望結果中有2行?也許你可以簡單地在GROUP BY – dnoeth

+0

中刪除DEAL_NUMMAS時執行'min(DEAL_NUMMAS)'如果你在選擇列表中有'deal_numadm',你也必須按照它的順序進行分組,如你所見。如果你想爲每個'ntt_id'和'deal_nummas'單獨一行,那麼你必須完全移除'deal_numadm',或者將5個值中的哪一個保留爲一個聚合。如果不知道如何解決這個難題,不能真正建議改變。 –

+0

根據您的預期結果看起來好像按node_id分組可以解決您的問題,並嘗試從group by子句中刪除其他人,除非d.deal_nummas(因爲它是您的預期結果)非常必要,您可以在select中使用MAX函數。當你從group-by中刪除它時,失敗的原因是你需要將它們保留在聚合函數中,或者它們應該出現在group-by子句中。所以明智地計劃。 – pushpraj

回答

0

好的,我想通了。我想要的查詢:

select 
case 
    when d.deal_numadm!=0 and d.deal_numadm is not null 
     then 'MA' || d.deal_nummas || '_' || d.ntt_id 
    when d.deal_numadm=0 or d.deal_numadm is null 
     then 'Master' || d.deal_nummas || '_' || d.ntt_id 
end as node_id, 
sum(cva.cva), sum(dva.dva) 
from acc_processed_cva cva 
left outer join acc_processed_dva dva on dva.deal_id = cva.deal_id 
join acc_deals d on d.deal_id = cva.deal_id and d.deal_scope='Y' 
join dt_runs r on r.run_id = cva.run_id and r.deal_cnt_id = d.deal_cnt_id 
where r.run_id=57 and d.deal_nummas=10700 and d.ntt_id = 1731413 
group by d.ntt_id, d.deal_nummas, case 
    when d.deal_numadm!=0 and d.deal_numadm is not null 
     then 'MA' || d.deal_nummas || '_' || d.ntt_id 
    when d.deal_numadm=0 or d.deal_numadm is null 
     then 'Master' || d.deal_nummas || '_' || d.ntt_id 
end;