Oracle多行转单行
Oracle multple rows to single row
我想在 oracle 中将多行连接成一行。以下是我想要实现的目标
案例table
case_id Name
1 AAA
2 BBB
主题table
case_id Subject
1 ENG
1 MATH
1 SCI
2 ENG
2 HIS
SUB_LOOKUP table
Abbr Subject
ENG English
MATH Mathematics
SCI Science
HIS History
预期输出
1 AAA English, Mathematics, Science
2 BBB English, History
我尝试使用如下的 LISTAGG 函数。它列出了我想要实现的目标,但是当我加入查找 table 然后加入主 table.
时,问题就来了
SELECT c.case_id, c.category_id, LISTAGG(cs.special_interest_cd) WITHIN GROUP
(ORDER BY cs.special_interest_cd) AS description
FROM CASE_SPECIAL_INTEREST cs, cases c
where c.case_id = cs.case_id
GROUP BY c.case_id;
尝试加入 2 table,但加入 "ORA-00979: not a GROUP BY expression"
有人可以帮助加入 3 tables 吗?没有 LISTAGG 是否有可能实现相同的效果,因为我读到它在达到 varchar 的最大字符数时抛出异常?
你只需要三个表之间的基本连接,然后是 case_id
和 name
的聚合:
SELECT
c.case_id,
c.Name,
LISTAGG(sl.subject, ',') WITHIN GROUP (ORDER BY sl.subject) AS subject
FROM "case" c
LEFT JOIN subject s
ON c.case_id = s.case_id
LEFT JOIN sub_lookup sl
ON s.Subject = sl.Abbr
GROUP BY
c.case_id,
c.Name;
请注意,我在这里使用左连接,以确保如果给定的 case_id
没有聚合的匹配项,结果集中仍会报告 record/value。
我想在 oracle 中将多行连接成一行。以下是我想要实现的目标
案例table
case_id Name
1 AAA
2 BBB
主题table
case_id Subject
1 ENG
1 MATH
1 SCI
2 ENG
2 HIS
SUB_LOOKUP table
Abbr Subject
ENG English
MATH Mathematics
SCI Science
HIS History
预期输出
1 AAA English, Mathematics, Science
2 BBB English, History
我尝试使用如下的 LISTAGG 函数。它列出了我想要实现的目标,但是当我加入查找 table 然后加入主 table.
时,问题就来了SELECT c.case_id, c.category_id, LISTAGG(cs.special_interest_cd) WITHIN GROUP
(ORDER BY cs.special_interest_cd) AS description
FROM CASE_SPECIAL_INTEREST cs, cases c
where c.case_id = cs.case_id
GROUP BY c.case_id;
尝试加入 2 table,但加入 "ORA-00979: not a GROUP BY expression" 有人可以帮助加入 3 tables 吗?没有 LISTAGG 是否有可能实现相同的效果,因为我读到它在达到 varchar 的最大字符数时抛出异常?
你只需要三个表之间的基本连接,然后是 case_id
和 name
的聚合:
SELECT
c.case_id,
c.Name,
LISTAGG(sl.subject, ',') WITHIN GROUP (ORDER BY sl.subject) AS subject
FROM "case" c
LEFT JOIN subject s
ON c.case_id = s.case_id
LEFT JOIN sub_lookup sl
ON s.Subject = sl.Abbr
GROUP BY
c.case_id,
c.Name;
请注意,我在这里使用左连接,以确保如果给定的 case_id
没有聚合的匹配项,结果集中仍会报告 record/value。