3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
LISTAGG函數(shù)是DB2 LUW 9.7中的新函數(shù)
參見(jiàn)示例:
create table myTable (id int, category int);
insert into myTable values (1, 1);
insert into myTable values (2, 2);
insert into myTable values (5, 1);
insert into myTable values (3, 1);
insert into myTable values (4, 2);
示例:在分組列中不按任何順序進(jìn)行選擇
select category, LISTAGG(id, ', ') as ids from myTable group by category;
結(jié)果:
CATEGORY IDS
--------- -----
1 1, 5, 3
2 2, 4
示例:在分組列中使用order by子句進(jìn)行選擇
select
category,
LISTAGG(id, ', ') WITHIN GROUP(ORDER BY id ASC) as ids
from myTable
group by category;
結(jié)果:
CATEGORY IDS
--------- -----
1 1, 3, 5
2 2, 4

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
我認(rèn)為通過(guò)這個(gè)較小的查詢(xún),您可以做您想做的事情。這等效于DB2中MySQL的GROUP_CONCAT。
SELECT
NUM,
SUBSTR(xmlserialize(xmlagg(xmltext(CONCAT( ', ',ROLES))) as VARCHAR(1024)), 3) as ROLES
FROM mytable
GROUP BY NUM;
這將輸出類(lèi)似:
NUM ROLES
---- -------------
1 111, 333, 555
2 222, 444
假設(shè)您的原始結(jié)果是這樣的:
NUM ROLES
---- ---------
1 111
2 222
1 333
2 444
1 555

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
根據(jù)您擁有的DB2版本,可以使用XML函數(shù)來(lái)實(shí)現(xiàn)此目的。
帶有一些數(shù)據(jù)的示例表
create table myTable (id int, category int);
insert into myTable values (1, 1);
insert into myTable values (2, 2);
insert into myTable values (3, 1);
insert into myTable values (4, 2);
insert into myTable values (5, 1);
使用xml函數(shù)匯總結(jié)果
select category,
xmlserialize(XMLAGG(XMLELEMENT(NAME "x", id) ) as varchar(1000)) as ids
from myTable
group by category;
結(jié)果:
CATEGORY IDS
-------- ------------------------
1 <x>1</x><x>3</x><x>5</x>
2 <x>2</x><x>4</x>
使用替換使結(jié)果看起來(lái)更好
select category,
replace(
replace(
replace(
xmlserialize(XMLAGG(XMLELEMENT(NAME "x", id) ) as varchar(1000))
, '</x><x>', ',')
, '<x>', '')
, '</x>', '') as ids
from myTable
group by category;
清理結(jié)果
CATEGORY IDS
-------- -----
1 1,3,5
2 2,4
剛看到使用XMLELEMENT的XMLTEXT而不是一個(gè)更好的解決方案在這里。
添加回答
舉報(bào)