汇总列中的值仅存在差异

时间:2019-10-03 14:45:15

标签: sql aggregation sql-server-2017

我想在哪一列的值匹配的地方

  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

它汇总所有字段,而不管两行之间的数据是否不同。

1 个答案:

答案 0 :(得分:0)

您可以使用:

select name, string_agg(distinct surname, ',') as surname, string_agg(age, ',')
from t
group by name;

这假设所有name是唯一的-对于大多数数据集来说,这似乎是一个强有力的假设。