微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果没有选择任何值,Listagg 分隔符正在打印

如何解决如果没有选择任何值,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 举报,一经查实,本站将立刻删除。