Есть ли решение для суммирования нескольких значений из одного столбца в другой столбец с условием? - PullRequest
0 голосов
/ 28 марта 2019

Я застрял с функцией 'SUM' в Oracle SQL

Здесь часть запроса, которую я использую для вычисления общего времени в секундах для всей строки 'APLFTSK_CODE', называется ACC.Имя столбца для результатов: TIME_TOTAL_ACC

SUM (
    CASE
    WHEN
    APLFTSK.APLFTSK_CODE = 'AAC'
    AND APLCALL.APLCALL_NUM = APLTSK.APLTSK_APLCALL
    THEN
    ROUND((APLTSK.APLTSK_FEND - APLTSK.APLTSK_FBEGIN)* (24 * 60)*60) 
    END
    ) 

Вот результат, который я получаю, когда пытаюсь 'SUM'

https://i.stack.imgur.com/OtFn3.jpg)

Iполучил только один результат строки, а не сумму всех строк, удовлетворяющих условию.Мне нужен один и тот же результат «2403» для всех строк, удовлетворяющих условию.

Я попытался сгруппировать в подпрограмме выбора внутри случая, но получил «однострочный подзапрос, возвращающий более одной строки», какрезультат

SUM (
    CASE
    WHEN
    APLFTSK.APLFTSK_CODE = 'AAC'
    AND APLCALL.APLCALL_NUM = APLTSK.APLTSK_APLCALL
    THEN
          (
          SELECT 
          ROUND((APLTSK.APLTSK_FEND - APLTSK.APLTSK_FBEGIN)* (24 * 60)*60)  
          FROM APLTSK, APLFTSK 
          GROUP BY APLTSK.APLTSK_NUM,APLFTSK.APLFTSK_CODE
          )
   END
   ) 

Я не знаю, как справиться с этой функцией в этом случае.Я прочитал несколько примеров того, как использовать функцию 'SUM' в Oracle, но я не знаю, как применить ее к моему делу.Большую часть времени «СУММА» сводится к получению результатов различных столбцов в одной строке.

Заранее благодарим за помощь

1 Ответ

0 голосов
/ 28 марта 2019

Вы, вероятно, ищете аналитическую версию sum(), что-то вроде:

CASE WHEN APLFTSK.APLFTSK_CODE = 'AAC' AND APLCALL.APLCALL_NUM = APLTSK.APLTSK_APLCALL
     THEN SUM(ROUND((APLTSK.APLTSK_FEND - APLTSK.APLTSK_FBEGIN) * 24*60*60))
          OVER (PARTITION BY APLFTSK.APLFTSK_CODE)
     ELSE 0
END

хотя неясно, как любая группа, которая у вас есть, может повлиять на результат.

...