我有与那里的帐户相关联的客户数据。在一个帐户中,我们可以有一个或多个客户,我想根据组成该帐户的客户名称创建“帐户名称”列,如下所示:
原始数据:
帐户ID | 顾客ID | 名称 |
---|---|---|
68959 | 121048 | 蒂埃里·罗克斯 |
68959 | 121049 | 投诉警察课 |
76280 | 121276 | 菲律宾飞利浦 |
76280 | 121277 | 阿里特·桑德琳 |
56800 | 121623 | 迪德尔人 |
79551 | 121771 | 菲利普卡车 |
79551 | 121772 | 斯拉加兹·凯伦 |
81646 | 122081 | 莫里亚克斯·法比恩 |
在根据客户创建帐户名称后,将组成该帐户:
帐户ID | 顾客ID | 名称 | 用户名 |
---|---|---|---|
68959 | 121048 | 蒂埃里·罗克斯 | ROQUES THIERRY&CAPO SYLVIE |
68959 | 121049 | 投诉警察课 | ROQUES THIERRY&CAPO SYLVIE |
76280 | 121276 | 菲律宾飞利浦 | 哥斯达黎加菲律宾和SANDRINE |
76280 | 121277 | 阿里特·桑德琳 | 哥斯达黎加菲律宾和SANDRINE |
56800 | 121623 | 迪德尔人 | 迪德尔人 |
79551 | 121771 | 菲利普卡车 | 卡车PHILIPPE和SLUGACZ KAREN |
79551 | 121772 | 斯拉加兹·凯伦 | 卡车PHILIPPE和SLUGACZ KAREN |
81646 | 122081 | 莫里亚克斯·法比恩 | 莫里亚克斯·法比恩 |
这必须通过SQL语句来实现,您建议我做什么?
谢谢
您将使用字符串聚合函数listagg()
。我不确定DB2是否支持它作为窗口函数:
select t.*,
listagg(name, ' & ') within group(order by customerid) over(partition by accountid) as accountnames
from mytable t
如果没有,则可以使用相关子查询代替:
select t.*,
(
select listagg(t1.name, ' & ') within group(order by t1.customerid)
from mytable t1
where t1.accountid = t.accountid
) as accountnames
from mytable t
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句