2014-03-27 63 views
0

我願做這樣的事情:如何使用的情況下,或解碼作爲Oracle SQL分析窗函數的一部分

select sum(nvl(total_time_out, 0)), 
     sum(nvl((case when day_of_week = 'Mon' then total_time_out else 0 end) over (partition by person_id), 0)) 
from xxpay_tna_summary_v 
where person_id = 7926 

其中第二列只返回的總時間非工作時間的總和星期一。這在Oracle SQL中是可行的,什麼是正確的語法?

+1

你必須給更多的細節,如果有一個人是爲了工作這一點... –

回答

2

檢查這個 http://sqlfiddle.com/#!4/df376/2

select sum((case when person_id = 100 then total_time_out else 0 end)) total_time, 
    sum(nvl((case when day_of_week = 'MON' then total_time_out else 0 end), 0)) monday_time 
from xxpay_tna_summary_v 
0

您的語法無效,因爲sum屬於over,但您將sum關鍵字移到了表達式的開頭。以下是更正聲明:

select nvl(sum(total_time_out), 0), 
     nvl(sum(case when day_of_week = 'Mon' then total_time_out else 0 end) over (partition by person_id), 0) 
from xxpay_tna_summary_v 
where person_id = 7926; 

(我也改變了你的第一個表達和與NVL地方它不相同,但可能更快是納秒,因爲NVL必須只應用一次。)

+0

這可能會失敗,'不是單組組function',因爲第一總和爲總功能。 – Noel

+0

您的選擇失敗並且沒有單組功能。 – Superdooperhero

相關問題