You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:24:53