[英]How to get multiple row values in single row but in different line(with Line break) in Oracle Sql
一个简单的选项是使用listagg
聚合它们并将分隔符设置为换行符:
样本数据:
SQL> select * from temp;
WO TITLE
-- --------------------
W1 T1
W1 T2
W2 TT1
询问:
SQL> select workflow_id,
2 listagg(title, chr(10)) within group (order by title) as title
3 from temp
4 group by workflow_id;
WO TITLE
-- --------------------
W1 T1
T2
W2 TT1
SQL>
将LISTAGG
与新的行分隔符一起使用(假设您已经对行进行了排序):
SELECT workflow_id,
LISTAGG(title, CHR(10)) WITHIN GROUP (ORDER BY ROWNUM) AS titles
FROM table_name
GROUP BY workflow_id;
其中,对于样本数据:
CREATE TABLE table_name (workflow_id, title) AS
SELECT 'W1', 'd1' FROM DUAL UNION ALL
SELECT 'W1', 'd5' FROM DUAL UNION ALL
SELECT 'W1', 'd4' FROM DUAL UNION ALL
SELECT 'W2', 'd2' FROM DUAL UNION ALL
SELECT 'W2', 'd3' FROM DUAL;
输出:
WORKFLOW_ID 标题 W1 d1
d5
d4W2 d2
d3
db<> 在这里摆弄
这在这里有效,希望它可以帮助......
WITH
tbl AS
(
Select 'w1' "WORKFLOW_NO", 'd1' "DISCIPLINE" From Dual UNION ALL
Select 'w1' "WORKFLOW_NO", 'd5' "DISCIPLINE" From Dual UNION ALL
Select 'w1' "WORKFLOW_NO", 'd4' "DISCIPLINE" From Dual UNION ALL
Select 'w2' "WORKFLOW_NO", 'd2' "DISCIPLINE" From Dual UNION ALL
Select 'w2' "WORKFLOW_NO", 'd3' "DISCIPLINE" From Dual
)
SELECT
SUBSTR(LISTAGG(' ' || Chr(10) || WORKFLOW_NO) WITHIN GROUP (ORDER BY WF), 3, 50) "WORKFLOW_NO",
LISTAGG(DISCIPLINE, Chr(10)) WITHIN GROUP (ORDER BY WF) "DISCIPLINE"
FROM
(
SELECT
c.WORKFLOW_NO "WF",
c.CNT "CNT",
CASE
WHEN Count(1) OVER(PARTITION BY t.WORKFLOW_NO ORDER BY t.WORKFLOW_NO ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) = c.CNT
THEN t.WORKFLOW_NO
ELSE ''
END "WORKFLOW_NO",
t.DISCIPLINE "DISCIPLINE"
FROM
tbl t
INNER JOIN
(
SELECT DISTINCT
WORKFLOW_NO "WORKFLOW_NO",
Count(WORKFLOW_NO) OVER(PARTITION BY WORKFLOW_NO ORDER BY WORKFLOW_NO) "CNT"
FROM
tbl
) c ON(c.WORKFLOW_NO = t.WORKFLOW_NO)
)
GROUP BY
WF, CNT
--
-- R e s u l t
-- WORKFLOW_NO DISCIPLINE
-- ------------ ----------
-- d1
-- d4
-- w1 d5
-- -----------------------------------------
-- d2
-- w2 d3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.