Правильная форма - листаг с регистром - PullRequest
0 голосов
/ 17 января 2019

Я получаю ошибку: ORA-00907: missing right parenthesis, но я не могу найти неправильный материал.

(select listagg(sp.name
||' : '||
(case when count(distinct sp.name) < 1 then NULL else szf.piece END) as cou_1, ',') 
WITHIN GROUP (ORDER BY sp.name,cou_1)
from sk_positions sp, sk_stock_f SZF, sk_stock SZ 
where SZF.CODE_ID =SK.ID AND SP.RID = SZF.RID_U AND SZF.ID_SZ = SZ.ID
and sp.sk_u = (%sk%) and SZF.piece != 0)

Я думаю, у меня проблема в listagg - case.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ошибка здесь:

szf.piece END) as cou_1
               ^

Вы не можете использовать псевдоним подвыражения, но только полное выражение для столбца. В Listagg оно должно появиться после завершения within group ().

как то так

WITHIN GROUP (ORDER BY sp.name,cou_1) as cou_1
0 голосов
/ 17 января 2019

Это не разрешено в Oracle. Вам не хватает одинарных кавычек для критериев поиска по шаблону.

sp.sk_u = (%sk%)

Ниже приведен правильный синтаксис (только LIKE работает с такими критериями поиска, а не =)

sp.sk_u LIKE ('%sk%')

Полный запрос должен быть таким, как показано ниже

(select listagg(sp.name ||' : '||(case when count(distinct sp.name) < 1 
                                       then NULL 
                                       else szf.piece 
                                       END) as cou_1, ',') 
WITHIN GROUP (ORDER BY sp.name,cou_1)
from sk_positions sp, sk_stock_f SZF, sk_stock SZ 
where SZF.CODE_ID =SK.ID
      AND SP.RID = SZF.RID_U 
      AND SZF.ID_SZ = SZ.ID
      and sp.sk_u LIKE ('%sk%') 
      and SZF.piece != 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...