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>
我有 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>