Sql LISTAGG,更改结果相对于另一列的排序

Sql LISTAGG,更改结果相对于另一列的排序,sql,oracle,listagg,Sql,Oracle,Listagg,我有一张这样的桌子: item Desc ---- ---- CSH Cash CHQ Cheque CDJ Cross Department EPS EPS SELECT LISTAGG(a.item, ', ') WITHIN GROUP (ORDER BY a.item ASC) "item", LISTAGG(a.Desc, ', ') WITHIN GROUP (ORDER BY a.Desc ASC) "Desc" FROM tableA a; 我

我有一张这样的桌子:

item   Desc
----   ----
CSH    Cash
CHQ    Cheque
CDJ    Cross Department
EPS    EPS
SELECT LISTAGG(a.item, ', ') WITHIN GROUP (ORDER BY a.item ASC) "item",
LISTAGG(a.Desc, ', ') WITHIN GROUP (ORDER BY a.Desc ASC) "Desc"
FROM tableA a;
我的SQL是这样的:

item   Desc
----   ----
CSH    Cash
CHQ    Cheque
CDJ    Cross Department
EPS    EPS
SELECT LISTAGG(a.item, ', ') WITHIN GROUP (ORDER BY a.item ASC) "item",
LISTAGG(a.Desc, ', ') WITHIN GROUP (ORDER BY a.Desc ASC) "Desc"
FROM tableA a;
结果是:

item                 Desc
----                 ----
CDJ,CHQ,CSH,EPS      Cash,Cheque,Cross Department,EPS
但是,我的预期结果是根据“Desc”的顺序对“item”进行排序,这意味着:

“CSH、CHQ、CDJ、EPS”


我能做些什么呢?

只需在以下两种用法中使用相同的
ORDER BY


只需在以下两种用法中使用相同的
ORDER BY


以下是您问题的解决方案:

SELECT LISTAGG("item", ', ') WITHIN GROUP (ORDER BY "Desc") "item",
LISTAGG("Desc", ', ') WITHIN GROUP (ORDER BY "Desc" ) "Desc"
FROM tableA;
输出:

  item               |     Desc
------------------------------------------------------------
CSH, CHQ, CDJ, EPS   |   Cash, Cheque, Cross Department, EPS
链接到演示:


以下是您问题的解决方案:

SELECT LISTAGG("item", ', ') WITHIN GROUP (ORDER BY "Desc") "item",
LISTAGG("Desc", ', ') WITHIN GROUP (ORDER BY "Desc" ) "Desc"
FROM tableA;
输出:

  item               |     Desc
------------------------------------------------------------
CSH, CHQ, CDJ, EPS   |   Cash, Cheque, Cross Department, EPS
链接到演示:


您要求给定记录中的值分散显示在结果集中的不同记录中。虽然这样做是可能的,但更大的问题是为什么要这样做?您要求给定记录中的值分散显示在结果集中的不同记录中。虽然这样做是可能的,但更大的问题是为什么要这样做?@TimBiegeleisen CDJ和Cash不应该在同一行,但如果按它们自身的值排序,它们应该在同一行。预期结果CSH和Cash在第一行。@TimBiegeleisen True,我混淆了列。现已修复。@TimBiegeleisen CDJ和Cash不应在同一行中,但它们是按自身值排序的。预期结果CSH和Cash在第一行。@TimBiegeleisen True,我混淆了列。现在修好了。