sql - 带case语句的-listagg的正确形式

标签 sql oracle oracle11g case listagg

我收到错误: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 有问题.

最佳答案

错误在这里:

szf.piece END) as cou_1
               ^

您不能为子表达式设置别名,而只能为列的完整表达式设置别名。在 Listagg 中,它应该在 within group () 之后做完了。

像这样的东西
WITHIN GROUP (ORDER BY sp.name,cou_1) as cou_1

关于sql - 带case语句的-listagg的正确形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54232252/

相关文章:

sql - 如何避免注入(inject)按运行时值排序查询

javascript - "Unexpected token ."JSON 解析无法解析带前导零的十进制

sql - postgresql中trunc函数的替代

用于查询部署在 heroku 的数据库的 SQL 可视化客户端

mysql - 将文件加载到表中...0 行受影响

Oracle regexp,如果字符串以数字开头,则在开头查找长度为 3 的数字。否则,查找末尾长度为 3 位的数字

database - 使用多个连接和可选参数进行查询

oracle - 尝试调用过程时的 PLS-00103

oracle - 目标表中的默认值

java - SQL异常 : Protocol Violation in oracle