2013-08-06 62 views
0

我與PL/SQL開發人員一起工作。在這個SQL語句後面我有SQL視圖。SQL語句中的多重總和

從下面的代碼,我收到FINE - 87FINR - 65的費用。我的願望是在另一列中總結FINEFINR的結果。

而且我用數0.12的期限2013年1月1日 - 2013年1月3日,不過我想以後使用不同數量的期間2013年1月3日(例如0.10) 。我的列在一段時間內被命名爲timestamp(varchar)。

你知道我該怎麼做這些事情嗎?

select name_table_name, 
-- FINE, FINR 
case  
    when name_table_name in ('FINE','FINR') 
    and table_seconds <= table_balanced 
    then (table_sd * 1.149798) - ((table_seconds/60)0.12)       
    when name_table_name in ('FINE','FINR') 
     and table_seconds > table_balanced 
    then (table_sd * 1.149798) - ((table_seconds/60)0.12) 
    -- RUSN  
    when name_table_name = 'RUSN' 
    then (table_sd * 1.149798)-((table_seconds/60)*0.20) 
else 0 end as charge 

這是從數據庫中截屏。我希望將FINE和FINR的總和(156.66)顯示在另一列中。

enter image description here

+1

你的第一個2例做同樣的事情,是有一個原因,他們不是在一個案例結合起來呢? '當('FINE','FINR')中的name_table_name時,那麼(table_sd * 1.149798) - ((table_seconds/60)0.12)' –

+0

_我希望在另一列中總結FINE和FINR的結果。 ?如果你想對他們進行總結並且分別顯示每個費用值。然後你需要爲其中的一個子查詢。如果你需要別的東西,請詳細說明一下? –

回答

1
select 
case 
    when name_table_name in ('FINE','FINR') 
    then 'FINE or FINR' 
    when name_table_name = 'RUSN' 
    then 'RUSN' 
    else 'others' 
end as name_table_name, 
sum (
case  
    when name_table_name in ('FINE','FINR') 
    and table_seconds <= table_balanced 
    then (table_sd * 1.149798) - ((table_seconds/60)*0.12)       
    when name_table_name in ('FINE','FINR') 
     and table_seconds > table_balanced 
    then (table_sd * 1.149798) - ((table_seconds/60)*0.12) 
    when name_table_name = 'RUSN' 
    then (table_sd * 1.149798)-((table_seconds/60)*0.20) 
else 0 end) as charge 
from table 
group by 
case 
    when name_table_name in ('FINE','FINR') 
    then 'FINE or FINR' 
    when name_table_name = 'RUSN' 
    then 'RUSN' 
    else 'others' 
end;