对oracle表中的多值列进行排序

对oracle表中的多值列进行排序,oracle,sorting,plsql,multivalue,Oracle,Sorting,Plsql,Multivalue,我正在尝试对oracle表中的列进行排序。列值为“M013、M007、M019、YYY、M018、XXX、999”。我正在尝试对列中的值进行排序,然后将其与已排序数据的另一列进行比较。我尝试了多个hash/MD5和一些其他选项,但没有帮助。 感谢您的帮助 您拥有的是一个逗号分隔的随机元素字符串。正如您所指出的,listag函数可以对结果进行排序。我认为最好的办法是将字符串解析为单个元素,然后让listagg用排序后的元素重新生成字符串。(见附件) FWIW…该列为varchar2数据类型。欢迎加

我正在尝试对oracle表中的列进行排序。列值为“M013、M007、M019、YYY、M018、XXX、999”。我正在尝试对列中的值进行排序,然后将其与已排序数据的另一列进行比较。我尝试了多个hash/MD5和一些其他选项,但没有帮助。
感谢您的帮助

您拥有的是一个逗号分隔的随机元素字符串。正如您所指出的,listag函数可以对结果进行排序。我认为最好的办法是将字符串解析为单个元素,然后让listagg用排序后的元素重新生成字符串。(见附件)


FWIW…该列为varchar2数据类型。欢迎加入SO社区。由于您的问题缺乏细节,您可以通过查看。特别是为什么要排序,以及1行的预期排序输出是什么。或者你的意思是你试图把它从一个逗号分隔的元素列表中解析成单独的元素。对不起,没有更多的细节。我进行排序的原因是,我将源列值“M013、M007、M019、YYY、M018、XXX、999”与来自不同表的列上的listagg函数输出结果进行比较。listagg函数排序并输出值,如“999、M007、M013、M019、M018、XXX、YYY”(排序后?)。因此,当我比较这两列时,即使值相同,但比较失败,因为它们没有排序。我并没有试图将它们解析为单个元素。请注意,当您添加详细信息时,请编辑原始帖子,不要在评论中这样做。评论中没有真正的格式,更多的人会看到原始帖子中的变化。当然,在以后的帖子@Gary_WThanks@Belayer中也会这样做。这非常有帮助,它按预期返回数据。我将在一个表列上实现它,而不是预定义的文本“M013、M007、M019、YYY、M018、XXX、999”,然后看看它是否有效。再次感谢您的回复@如果答案对你有帮助,请接受。这有助于将来有相同或相似问题的提问者。
with test(str) as 
     ( select 'M013,M007,M019,YYY,M018,XXX,999' from dual) 
select listagg(estr,',') within group (order by estr)
   from (select regexp_substr(str,'[^,]+', 1, level) estr
           from test connect by regexp_substr(str, '[^,]+', 1, level) is not null 
        ) ;