Oracle 19c中如何按column_id排序LISTAGG聚合的列名?
解决Oracle 19c中LISTAGG按column_id顺序生成列名的问题
你的问题核心出在LISTAGG函数内部的排序规则上:
- 原SQL里
listagg(column_name,',') within group (order by column_name)明确指定了按列名的字母顺序拼接,这直接决定了最终结果的排列顺序。 - 外层的
order by column_id是对聚合后的单行结果排序,但因为聚合后只有一条数据,这个排序完全起不到调整列名顺序的作用。
要按column_id的顺序生成列名,只需要把LISTAGG内部的排序字段替换成column_id即可,修正后的SQL如下:
select listagg(column_name, ',') within group (order by column_id) from user_tab_columns where table_name = 'NS_INVE_ADJ';
执行这个语句后,就能得到和你给出的列ID对应顺序完全一致的列名字符串:INVE_AUDIT_EXT_ID,TRANS_DATE,ADJ_LOCATION,ADJUSTMENT_ACCT,DIVISION_ID,ITEM,LOCATIONS,PROPERTY_MARK,REASON,ADJ_QTY,DIV_LINE
内容的提问来源于stack exchange,提问作者epipko
相关产品推荐
相关产品推荐

