为了账号安全,请及时绑定邮箱和手机立即绑定

DB2逗号分隔输出(按组)

DB2逗号分隔输出(按组)

12345678_0001 2019-10-21 10:26:20
是否有内置的函数用于逗号分隔的列值DB2 SQL?示例:如果存在带有的列,ID并且它具有3行相同的列,ID但具有三个不同的角色,则数据应以逗号连接。ID   | Role------------4555 | 24555 | 34555 | 4每行输出应类似于以下内容:4555 2,3,4
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

LISTAGG函数是DB2 LUW 9.7中的新函数


参见示例:


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);

示例:在分组列中不按任何顺序进行选择


select category, LISTAGG(id, ', ') as ids from myTable group by category;

结果:


CATEGORY  IDS

--------- -----

1         1, 5, 3

2         2, 4

示例:在分组列中使用order by子句进行选择


select

  category,

  LISTAGG(id, ', ') WITHIN GROUP(ORDER BY id ASC) as ids

from myTable

group by category;

结果:


CATEGORY  IDS

--------- -----

1         1, 3, 5

2         2, 4


查看完整回答
反对 回复 2019-10-21
?
临摹微笑

TA贡献1982条经验 获得超2个赞

我认为通过这个较小的查询,您可以做您想做的事情。这等效于DB2中MySQL的GROUP_CONCAT。


SELECT 

NUM, 

SUBSTR(xmlserialize(xmlagg(xmltext(CONCAT( ', ',ROLES))) as VARCHAR(1024)), 3) as ROLES

FROM mytable 

GROUP BY NUM;

这将输出类似:


NUM   ROLES

----  -------------

1     111, 333, 555

2     222, 444

假设您的原始结果是这样的:


NUM   ROLES

----  ---------

1     111

2     222

1     333

2     444

1     555


查看完整回答
反对 回复 2019-10-21
?
杨魅力

TA贡献1811条经验 获得超6个赞

根据您拥有的DB2版本,可以使用XML函数来实现此目的。


带有一些数据的示例表


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函数汇总结果


select category, 

    xmlserialize(XMLAGG(XMLELEMENT(NAME "x", id) ) as varchar(1000)) as ids 

    from myTable

    group by category;

结果:


CATEGORY IDS

 -------- ------------------------

        1 <x>1</x><x>3</x><x>5</x>

        2 <x>2</x><x>4</x>

使用替换使结果看起来更好


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;

清理结果


CATEGORY IDS

 -------- -----

        1 1,3,5

        2 2,4

刚看到使用XMLELEMENT的XMLTEXT而不是一个更好的解决方案在这里。


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 1 关注
  • 3063 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信