2013-05-23 2 views
0

Мне нравится использовать две совокупные функции (COUNT, SUM) в одном операторе SQL с помощью команды CASE WHEN. Мой код выглядит так:Два совокупных функционала с различными критериями

CASE 
     WHEN ( ( ( ( (CSSC_MASTER_VIEW.ORDER_TYPE = 'OR') 
          OR (OCSSC_MASTER_VIEW.ORDER_TYPE = 'KB')) 
         OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'KE')) 
        OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'OR-TAT')) 
       OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'QT-TAT')) 
      OR (CSSC_MASTER_VIEW.ORDER_TYPE = 'QT') 
     THEN 
     COUNT((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 

     ELSE 
     SUM((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 
    END 
     AS Lines_processed 

Этот код дает ошибку "Oracle Database Error: ORA-00900: недопустимый заявление SQL"

Может ли один помочь мне в этом?

+1

Нам нужно полное заявление, чтобы помочь вам. Также почему вы используете столько круглых скобок? Вы намеренно пытаетесь сделать ваш код более трудным для чтения/отладки? –

+1

Думаю, вам придется разбить это на два отдельных агрегата. На данный момент вы запрашиваете невозможное: два значения в одном выходе. Какая база данных будет возвращена - SUM или COUNT? Он не может сказать; ни я тоже. –

+0

Как указывает Джонатан. Кажется, вы агрегируете, но могут быть несколько строк, которые соответствуют одному случаю, и некоторые, которые соответствуют другому случаю. Что делать? Счет или сумма? –

ответ

2

Удалить двойной() в

((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 

и

SUM((CSSC_MASTER_VIEW.ORDER_LINE_NUMBER)) 

ой и

CASE WHEN (CSSC_MASTER_VIEW.ORDER_TYPE IN ('OR', 'KB', 'KE', 'OR-TAT', 'QT-TAT', 'QT')) 
    THEN COUNT(CSSC_MASTER_VIEW.ORDER_LINE_NUMBER) 
    ELSE SUM(CSSC_MASTER_VIEW.ORDER_LINE_NUMBER) 
END 
AS Lines_processed 

Должно работать слишком

+0

Спасибо, но это приводит к другой ошибке «Ошибка Oracle Database: ORA-00937: не групповая групповая функция». Я делаю что-то неправильно здесь? – santhosha

+0

Возможно, вам не хватает группы по предложению –

+0

Да, вы правы. Он работает сейчас. большое спасибо – santhosha

0

Похоже, как вложенные выражения в предложение WHEN - это то, что ' вы убиваете вас; попробуйте избавиться от всех круглых скобок в этом заявлении

EDIT: Или, еще лучше, используйте инструкцию IN, например, vc 74.

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