2013-08-06 4 views
0

Я работаю с разработчиком PL/SQL. За этим оператором SQL у меня есть представления SQL.Несколько сумм в SQL-заявлении

Из кода ниже, я получаю заряд для FINE - 87 и FinR - 65. Мое желание состоит в том, чтобы суммировать результат FINE и FINR в другой колонке.

Также я использовать номер 0,12 за период 01/01/2013 - 01/03/2013, однако я хотел бы использовать другой номер в течение периода после 01/03/2013 (например 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 

Это снимки экрана из базы данных. Я хотел бы, чтобы сумма (156.66) FINE и FINR отображалась в другом столбце.

enter image description here

+1

Ваши первые 2 случая делают то же самое, есть причина, почему они не объединены в одном случае? 'when name_table_name in ('FINE', 'FINR') then (table_sd * 1.149798) - ((table_seconds/60) 0.12)' –

+0

_Мые желание состоит в том, чтобы суммировать результат FINE и FINR в другом столбце. ? если вы хотите их суммировать, а также показывать каждую стоимость заряда отдельно. Затем вам нужно сделать подзапрос для одного из них. Если вам нужно что-то еще, PLZ разработать? –

ответ

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; 
Смежные вопросы