在一个帐户中为 2 个客户创建列名 SQL
Create column name for 2 customers in one account SQL
我有关于链接到那里帐户的客户的数据。在一个帐户中,我们可以有一个或多个客户,我想根据组成该帐户的客户名称创建“帐户名称”列,如下所示:
原始数据:
Account ID
Customer ID
Name
68959
121048
ROQUES THIERRY
68959
121049
CAPO SYLVIE
76280
121276
CORSEAUX PHILIPPE
76280
121277
ARRIAT SANDRINE
56800
121623
PERSONNA DIDIER
79551
121771
TRUQUEZ PHILIPPE
79551
121772
SLUGACZ KAREN
81646
122081
MOREAUX FABIEN
根据组成帐户的客户创建帐户名称后:
Account ID
Customer ID
Name
Account Name
68959
121048
ROQUES THIERRY
ROQUES THIERRY&CAPO SYLVIE
68959
121049
CAPO SYLVIE
ROQUES THIERRY&CAPO SYLVIE
76280
121276
CORSEAUX PHILIPPE
CORSEAUX PHILIPPE&ARRIAT SANDRINE
76280
121277
ARRIAT SANDRINE
CORSEAUX PHILIPPE&ARRIAT SANDRINE
56800
121623
PERSONNA DIDIER
PERSONNA DIDIER
79551
121771
TRUQUEZ PHILIPPE
TRUQUEZ PHILIPPE&SLUGACZ KAREN
79551
121772
SLUGACZ KAREN
TRUQUEZ PHILIPPE&SLUGACZ KAREN
81646
122081
MOREAUX FABIEN
MOREAUX FABIEN
这必须通过 SQL 语句来实现,你推荐我做什么?
谢谢
您将使用字符串聚合函数 listagg()
。我不确定 DB2 是否支持它作为 window 函数:
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
我有关于链接到那里帐户的客户的数据。在一个帐户中,我们可以有一个或多个客户,我想根据组成该帐户的客户名称创建“帐户名称”列,如下所示:
原始数据:
Account ID | Customer ID | Name |
---|---|---|
68959 | 121048 | ROQUES THIERRY |
68959 | 121049 | CAPO SYLVIE |
76280 | 121276 | CORSEAUX PHILIPPE |
76280 | 121277 | ARRIAT SANDRINE |
56800 | 121623 | PERSONNA DIDIER |
79551 | 121771 | TRUQUEZ PHILIPPE |
79551 | 121772 | SLUGACZ KAREN |
81646 | 122081 | MOREAUX FABIEN |
根据组成帐户的客户创建帐户名称后:
Account ID | Customer ID | Name | Account Name |
---|---|---|---|
68959 | 121048 | ROQUES THIERRY | ROQUES THIERRY&CAPO SYLVIE |
68959 | 121049 | CAPO SYLVIE | ROQUES THIERRY&CAPO SYLVIE |
76280 | 121276 | CORSEAUX PHILIPPE | CORSEAUX PHILIPPE&ARRIAT SANDRINE |
76280 | 121277 | ARRIAT SANDRINE | CORSEAUX PHILIPPE&ARRIAT SANDRINE |
56800 | 121623 | PERSONNA DIDIER | PERSONNA DIDIER |
79551 | 121771 | TRUQUEZ PHILIPPE | TRUQUEZ PHILIPPE&SLUGACZ KAREN |
79551 | 121772 | SLUGACZ KAREN | TRUQUEZ PHILIPPE&SLUGACZ KAREN |
81646 | 122081 | MOREAUX FABIEN | MOREAUX FABIEN |
这必须通过 SQL 语句来实现,你推荐我做什么?
谢谢
您将使用字符串聚合函数 listagg()
。我不确定 DB2 是否支持它作为 window 函数:
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