我有一张像这样的table
| 案例ID|名称|地址|邮政编码|角色|
| - -|- -|- -|- -|- -|
| 一个|乔|地址_1|压缩_1|角色_1|
| 一个|若翰|地址_2|压缩_2|角色_1|
| 一个|简|地址_3|压缩_3|角色_1|
| 一个|比尔|地址_4|压缩地址_4|角色_1|
| 一个|比尔|地址_5|压缩文件_5|角色_2|
| 2个|鲍勃|地址_6| zip_6|角色_1|
| 2个|尚|地址_7|压缩_7|角色_1|
我想按名称和CaseID分组,列出每个组中的角色。这一部分很简单。棘手的是,正如您可以看到的Bill,我们有两个不同的地址和邮政编码。我试图在组中只保留一个具有Max或Min聚合函数的地址,但结果地址可能不一致。保存一行的zip和另一行的地址。我如何在一个组中获取同一行的zip和地址(无论是哪一行),并列出所有角色。我希望得到如下结果
| 案例ID|名称|地址|邮政编码|角色|
| - -|- -|- -|- -|- -|
| 一个|乔|地址_1|压缩_1|角色_1|
| 一个|若翰|地址_2|压缩_2|角色_1|
| 一个|简|地址_3|压缩_3|角色_1|
| 一个|比尔|地址_4|压缩地址_4|角色_1、角色_2|
| 2个|鲍勃|地址_6| zip_6|角色_1|
| 2个|尚|地址_7|压缩_7|角色_1|
或
| 案例ID|名称|地址|邮政编码|角色|
| - -|- -|- -|- -|- -|
| 一个|乔|地址_1|压缩_1|角色_1|
| 一个|若翰|地址_2|压缩_2|角色_1|
| 一个|简|地址_3|压缩_3|角色_1|
| 一个|比尔|地址_5|压缩文件_5|角色_1、角色_2|
| 2个|鲍勃|地址_6| zip_6|角色_1|
| 2个|尚|地址_7|压缩_7|角色_1|
3条答案
按热度按时间neekobn81#
在Oracle中,这是使用
keep
语法聚合函数的一个很好的用例:keep
的order by
子句允许您一致地“挑选”组中的一行--在与组中的其他行进行排序时,其address
排在第一位的行;我们可以跨列重复该表达式以获得同一行的zip
。请注意,使用更稳定的排序条件(例如可能是
order by address_id
?)将有利于查询。否则,当存在重复地址时,应 * 保留 * 哪一行的zip?von4xj4u2#
这里 有 一 个 选项 ;读取 代码 中 注解 。
示例 数据 :
中 的 每 一 个
查询 从 此处 开始 :
格式
结果 :
格式
vmdwslir3#
ST样