我有一个如下所示的查询并列出了它的输出:
SELECT DISTINCT TRACKING_NUM,TITLE_OF_DOC_SEC
FROM some_table
WHERE TRACKING_NUM IS NOT NULL;
O / P:
TRACKING_NUM TITLE_OF_DOC_SEC
007 Email Flow
007 Test Bug 53306
007 Title 1119
007 Title Test
007 test bug
009 1156
089 Title 21173
098 test Doc Section
我想重新编写查询,以便输出如下:
TRACKING_NUM TITLE_OF_DOC_SEC
007 Email Flow,Test Bug 53306,Title 1119,Title Test,test bug
009 1156
089 Title 21173
098 test Doc Section
任何人都可以帮忙吗?
答案 0 :(得分:1)
在11g中使用Listagg()或在10g中使用WM_Concat():
SELECT LISTAGG(TITLE_OF_DOC_SEC, ',') WITHIN GROUP (ORDER BY TRACKING_NUM) AS TITLE_OF_DOC_SEC
FROM your table
WHERE....
SELECT WM_CONCAT(TITLE_OF_DOC_SEC) AS TITLE_OF_DOC_SEC
FROM your table
WHERE....
答案 1 :(得分:1)
如果您使用的是Oracle 11g +,则可以使用LISTAGG()
:
SELECT TRACKING_NUM,
LISTAGG(TITLE_OF_DOC_SEC, ', ') WITHIN GROUP (ORDER BY TRACKING_NUM) AS TITLE_OF_DOC_SEC
FROM some_table
WHERE TRACKING_NUM IS NOT NULL
GROUP BY TRACKING_NUM;
答案 2 :(得分:1)
Listagg是最好的选择:
SQL> select tracking_num,
2 listagg(title_of_doc_sec,',') within group (order by title_of_doc_sec) title_of_doc_sec
3 from (select distinct tracking_num , title_of_doc_sec from some_table)
4 group by tracking_num;
TRA TITLE_OF_DOC_SEC
--- ----------------------------------------------------------------------
007 Email Flow,Test Bug 53306,Title 1119,Title Test,test bug
009 1156
089 Title 21173
098 test Doc Section
10g你可以使用wm_concat
(但请注意,这没有记录):
SQL> select tracking_num,
2 wm_concat(title_of_doc_sec) title_of_doc_sec
3 from (select distinct tracking_num , title_of_doc_sec from some_table)
4 group by tracking_num;
TRA TITLE_OF_DOC_SEC
--- ----------------------------------------------------------------------
007 Title Test,test bug,Title 1119,Email Flow,Test Bug 53306
009 1156
089 Title 21173
098 test Doc Section
甚至是模型条款:
SQL> with data as (select distinct tracking_num , title_of_doc_sec from some_table)
2 select tracking_num, title_of_doc_sec
3 from (select *
4 from data
5 model
6 partition by (tracking_num)
7 dimension by (row_number() over (partition by tracking_num order by title_of_doc_sec) rn)
8 measures (title_of_doc_sec t, cast(null as varchar2(4000)) title_of_doc_sec,
9 count(*) over (partition by tracking_num) cnt)
10 rules(
11 title_of_doc_sec[any] = case when t[cv() - 1 ] is null
12 then t[cv()]
13 else title_of_doc_sec[cv()-1]||', '|| t[cv()]
14 end
15 ))
16 where cnt = rn;
TRA TITLE_OF_DOC_SEC
--- ----------------------------------------------------------------------
007 Email Flow, Test Bug 53306, Title 1119, Title Test, test bug
009 1156
089 Title 21173
098 test Doc Section