如何解决如果没有选择任何值,Listagg 分隔符正在打印
我在诸如
之类的过程中的 select 语句中使用了LISTAGG()
函数
SELECT disTINCT REPLACE(LISTAGG(a.student1||':'||a.score||'+')
WITHIN GROUP ( ORDER BY a.roll_no) OVER (PARTITION BY a.class)
如果我的 select 语句没有空值,那么我得到
例如:ABC:100
但是如果选择为空,那么我得到
例如::
如果没有选择任何行,我希望它为空。
解决方法
问题在于,无论您连接的值是否为 NULL
,您聚合的表达式都会返回非 NULL 值。我的猜测是你想要类似的东西
listagg(case when a.student1 is not null
then a.student1||':'||a.score||'+'
else null
end)
如果您可以为 null
设置一个 student1
值,但为 score
设置一个非 NULL 值,则您需要调整 case
语句以指定您的想要在那种情况下发生(你想要“:”和“+”吗?只是“+”?)
好吧,您的 REPLACE
不完整。另外,'+'
真的应该连接吗?那么用什么字符串分隔值?
REPLACE (
LISTAGG (a.student1 || ':' || a.score,'+') --> removed || for the + sign
WITHIN GROUP (ORDER BY a.roll_no)
OVER (PARTITION BY a.class),':','') --> missing arguments for REPLACE
如果这仍然不是您的要求,请提供示例测试数据和所需的输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。