大佬教程收集整理的这篇文章主要介绍了根据列值的顺序连接列值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试找出一种方法,将与联名账户持有人相同的账户组合在一起。一个账户有 1 个主要人,最多有 4 个额外的联名账户持有人。考虑以下示例:
帐号 | 主要 | 关节 1 | 关节2 | Joint3 | Joint4 |
---|---|---|---|---|---|
123 | 标记 | 蒂姆 | 吉姆 | 布莱恩 | 约翰 |
124 | 标记 | 吉姆 | 蒂姆 | 布莱恩 | 约翰 |
134 | 吉姆 | 标记 | 蒂姆 | 布莱恩 | 约翰 |
324 | 安 | 雪莉 | 海伦 | ||
168 | 雪莉 | 安 | 海伦 |
所以在上面:
我正在考虑通过使用 case 语句对 PriMary 和 Joint%s 进行排序,然后将订单连接成一个字符串,然后我可以对其进行分组来解决这个问题。因此,在 Ann、SHelly 和 Helen 的情况下 - 按字母顺序排列会给我 Ann、Helen 和 SHelly,我会将这些名称连接在一起以获得“AnnHelenSHelly”并按此字符串分组。我已经开始这样做了,但是当我遇到一个帐户上有 3 或 4 个联名持有人的情况时,我发现它有点混乱。对于只有一个主要和一个关节的情况,我只是这样做:
num_joints = 1 时的情况,则最少 (priMary,joint1) ||最大的(主要的,关节 1) 当 num_joints = 2 时,则最少(主要,关节 1,关节 2)|| (当关节 1 > 最少(主要,关节 1,关节 2)和关节 1 最小(主要,关节 1,关节 2)和关节 2
但我想知道是否有更简单、更具可扩展性的方法来做到这一点,这样当我到达 num_joints = 3 或 4 时,它就不会太混乱。或者,也许还有另一种方法可以对其进行分组,而不必创建由主要持有人和联合持有人按顺序组成的字符串。
其他一些注意事项:
使用 UNPIVOT
将列转换为行,然后使用 LISTAGG
按字母顺序聚合每个帐户的名称,然后再次使用 LISTAGG
聚合每个唯一名称列表的帐户。
这个解决方案仍然有点复杂,并没有比您的 CASE
版本简单多少,但它的扩展性很好,并且在解决方案中添加另一列也很简单。该示例使用 LISTAGG
,它非常适合显示结果,但如果您要在数据库中处理结果,您的最终生产版本可能不应该使用 LISTAGG
。
create table accounts
(
account number,priMary varchar2(100),joint1 varchar2(100),joint2 varchar2(100),joint3 varchar2(100),joint4 varchar2(100)
);
insert into accounts
SELEct 123,'Mark','Tim','Jim','Brian','John' from dual union all
SELEct 124,'John' from dual union all
SELEct 134,'John' from dual union all
SELEct 324,'Ann','SHelly','Helen','','' from dual union all
SELEct 168,'' from dual;
--Accounts per group.
SELEct names,listagg(account,',') within group (order by account) accounts
from
(
--Aggregate names into alphabetical list per account.
SELEct
account,listagg(account_name,') within group (order by account_Name) names
from
(
--Unpivot columns into rows.
SELEct account,acCount_Type,account_name
from accounts
unpivot (account_name for acCount_Type in
(priMary as 'priMary',joint1 as 'join1',joint2 as 'joint2',joint3 as 'joint3',joint4 as 'joint4')
)
)
group by account
)
group by names
order by names;
NAMES ACCOUNTS
----------------------- -----------
Ann,Helen,SHelly 168,324
Brian,Jim,John,Mark,Tim 123,124,134
以上是大佬教程为你收集整理的根据列值的顺序连接列值全部内容,希望文章能够帮你解决根据列值的顺序连接列值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。