如何汇总列中的值仅存在差异

问题描述 投票:0回答:1

我希望一列的值匹配的地方:

  1. 汇总两个值不同的其他列中的数据
  2. 如果值相同,则取值

示例数据

Name  Surname Age
Ryan  Smith   28
Ryan  Smith   29
Sean  Johnson 37

所需结果:

Name  Surname Age
Ryan  Smith   28, 29
Sean  Johnson 37

名称ryan出现两次,因此只希望汇总其他字段的数据,而两行的数据不同。

姓氏在两行中都是Smith,因此无需汇总,只想在一行中填充为Smith年龄不同,因此要将两行的年龄汇总为一行

[Sean Johnson]记录在所有列中都是唯一的,因此无需汇总或修改任何内容

我已经尝试过string_agg函数,但这给出了结果:

Name  Surname          Age
Ryan  Smith, Smith     28,29
Sean  Johnson           37

无论两行之间的数据是否不同,它都会汇总所有字段

sql sql-server-2016 aggregation
1个回答
0
投票

您必须group by name, surname表的不同行(对于两行相同的情况:)

select
  t.name, t.surname, string_agg(t.age, ',')
from (
  select distinct name, surname, age
  from tablename
) t
group by t.name, t.surname

请参见demo。结果:

> name | surname | age  
> :--- | :------ | :----
> Sean | Johnson | 37   
> Ryan | Smith   | 28,29
© www.soinside.com 2019 - 2024. All rights reserved.