2016-03-07 3 views
0

Я пытаюсь сделать некоторую математику в оракуле, в которой мне возвращают сумму многих строк, минус значение 1 строки в другом столбце в той же таблице. Это возможно?оракул сумма многих строк - значение одной строки

Например,

выберите сумму (column1) - (выберите COLUMN2 из table1 где месяц = ​​to_date (201505, 'ГГГГММ')) из table1 где месяц> = to_date (201006, 'ГГГГММ') ;

+1

Вы пробовали свой запрос? У вас есть ошибка или неожиданное поведение? – Aleksej

+0

@Aleksej: собирался ввести одно и то же предложение .. Oo Но также добавляя, просто нужно убедиться, что 'where month = to_date (201505, 'yyyymm')' приводит к одной строке ... но .. uh. . yeah .. :) – Ditto

+1

не размещать запросы в комментариях, невозможно прочитать .. если это актуально .. опубликуйте его в исходном сообщении .. – Ditto

ответ

2

Возможно, но вам нужно перекреститься с подзапросом.

select 
    s.sum1 - t.column2 
from (select sum(column1) as sum1 from table1 where month >= to_date('201006','yyyymm')) s 
cross join (select column2 from table1 where month = to_date('201505','yyyymm')) t 
0

Верьте, что это возможно. Учитывая, что вы можете идентифицировать строку с другим столбцом, у которого есть вычитаемое значение, вы можете использовать aggregate 'sum' в сочетании с 'case' statement.

Если условие соответствует, вычтите соответствующий столбец два из столбца, другой - не вычитайте и используйте исходное значение в столбце-1 для функции sum.

Это будет выглядеть примерно так:

select 
sum( 
    case (when <condition-normal>) then 
     column_one 
    else 
     column_two - column_one 
     ) 
) from table; 

PS: Не забудьте проверить его против различных наборов данных!

Смежные вопросы