ORACLE LISTAGG 的值

ORACLE LISTAGG the values

我有 2 个表 TABLE1 和 TABLE2,连接这两个表的是 TABLE3,这是我的预期结果。已附上屏幕截图中的所有详细信息。如果有人可以为此提供解决方案,那将非常有帮助。提前致谢。 enter image description here

试试这个。

--未测试

SELECT CATEGORYID, CategoryName, CategoryDesc ,  
LISTAGG(rolerank, ",") WITHIN GROUP(ORDER BY CATEGORYID,identifier )
(
SELECT CATEGORYID, CategoryName, CategoryDesc, identifier, role || ':' || rank as rolerank 
FROM TABLE1 T1
JOINT TABLE2 T2 ON T1.CATEGORYID = T2.CATEGORYID
) GROUP BY CATEGORYID, CategoryName, CategoryDesc

第 1 - 8 行中的示例数据;完成工作的查询从第 10 行开始。

SQL> with
  2  table1 (categoryid, categoryname, categorydesc) as
  3    (select 1, 'C1', 'Category 1' from dual),
  4  table2 (identifier, categoryid, role, rank) as
  5    (select 9001, 1, 'ZT01',  1 from dual union all
  6     select 9002, 1, 'ZT01',  1 from dual union all
  7     select 9002, 1, 'ZT04', -1 from dual
  8    )
  9  --
 10  select a.categoryid,
 11         a.categoryname,
 12         a.categorydesc,
 13         b.identifier,
 14         listagg(b.role ||':'|| b.rank, ', ') within group (order by b.role) rolerank
 15  from table1 a join table2 b on a.categoryid = b.categoryid
 16  group by a.categoryid,
 17           a.categoryname,
 18           a.categorydesc,
 19           b.identifier;

CATEGORYID CA CATEGORYDE IDENTIFIER ROLERANK
---------- -- ---------- ---------- --------------------
         1 C1 Category 1       9001 ZT01:1
         1 C1 Category 1       9002 ZT01:1, ZT04:-1

SQL>