2016-10-16 3 views
1

Проблемы с использованием вызова nvl внутри listagg.Использование nvl в listagg SQL Oracle

Я новичок в SQL, так что я все еще ненадежный на синтаксисе ..

listagg(nvl(asgu.name, ', '),'In waiting') 
    within group (order by asgu.name) as asgu_name, 
    case 
    when asgu.name is not null then asgu.name 
    else 'In Waiting' 
    end 'In waiting', 

Ошибка: ORA-00923: FROM ключевое слово не найдено, где ожидается

+0

Добавьте полный запрос вместе с данными примера и ожидаемым результатом. –

+0

Это действительно длинный запрос, и я не делаю Думаю, ты хочешь увидеть все это. Ожидаемые результаты - это имя, и если поле равно null, я хочу, чтобы он сказал «В ожидании». Однако я могу сказать, что этот запрос работал отлично, прежде чем добавлять nvl –

+0

Рассмотрите возможность использования [coalesce] (https://www.techonthenet.com/oracle/functions/coalesce.php) - лучше, чем 'nvl' –

ответ

2

Ваш listagg() код должен, вероятно, выглядеть следующим образом :

listagg(coalesce(asgu.name, 'In waiting'), ', ') within group (order by asgu.name) as asgu_names, 

Другой код не имеет смысла. Либо asgu.name агрегируется, либо не агрегируется. У вас должна быть функция агрегации для второго выражения.

+0

Это отлично поработало. Спасибо. –

0

Неправильная линия . Вы можете использовать пробел в псевдониме столбца, но он должен быть в двойных кавычках (например, end "In waiting")