我收到错误消息: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
中遇到问题。
答案 0 :(得分:1)
错误在这里:
szf.piece END) as cou_1
^
您不能为子表达式加上别名,而只能为列的完整表达式命名。在Listagg
中,它应该在within group ()
完成之后出现。
类似的东西
WITHIN GROUP (ORDER BY sp.name,cou_1) as cou_1
答案 1 :(得分:0)
这在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)