2017-01-09 4 views
0

Я использую функцию суммы внутри оператора case. Я хочу сделать выборочное суммирование строк.Селективное суммирование внутри оператора case

case when 
type in ('A','B') 
then nvl(SUM(Amount_1),Amount) 
else Amount 

Две колонки есть Количество и Amount_1 и для столбца Amount_1, я хочу удалить несколько строк на основе некоторого условия С1. Напр. Если у меня есть 10 строк, которые имеют тип в A и на основании условия C1, я получаю только 8 строк, тогда я хочу суммировать столбец Amount_1 на основе только 8 строк.

ответ

2

Я думаю, что вы правильно поняли логику, но ваш синтаксис немного выключен. Вы должны использовать выражение CASEвнутриSUM() функция, а не наоборот.

SELECT type, 
     SUM(CASE WHEN type IN ('A', 'B') 
       THEN COALESCE(Amount_1, Amount) ELSE Amount END) AS type_sum -- ELSE 0 ? 
FROM yourTable 

Это будет вычислять сумму COALESCE(Amount_1, Amount) для тех записей, где type является либо A или B, в противном случае он будет использовать Amount в сумме. Если вы намеревались не считать несоответствующие записи вообще, тогда измените мой запрос, используя ELSE 0 в выражении CASE.

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