将多个列值合并到新列中(如果它是重复的)



我甚至确定这是否可以完成,但我很有希望。目前使用mysql 5.7

如果所有列都是基于电话值的重复条目,我想显示它们。然后,我想将id号较高的所有数据选择到多个新列中。

我不知道如何创建一个能正确显示所有重复项的视图,否则会更容易弄清楚。我使用以下查询来获取数据。

原始表格

id  customer_name   customer_email   customer_phone   comments
1   Jack            jack@jack.com    111-111-1111
2   Jill            jill@jill.com    111-111-1111
3   Tim             tim@tim.com      222-222-2222
4   Tonya           tonya@tonya.com  222-222-2222

预期结果

id  customer_name   customer_email   customer_phone   spouse_name   spouse_email    comments
1   Jack            jack@jack.com    111-111-1111     Jill          jill@jill.com   Jill jill@jill.com
3   Tim             tim@tim.com      222-222-2222     Tonya         tonya@tonya.com Tonya tonya@tonya.com

理想情况下,所有3列都会被填充,但spouse_name和spouse_email更重要,因为我总是可以将它们组合起来并插入注释中。

如果您运行的是MysQL 8.0,您可以使用窗口函数和条件聚合:

select 
max(case when rn = 1 then customer_name end) as customer_name_1,
max(case when rn = 1 then customer_email end) as customer_email_1,
customer_phone,
max(case when rn = 2 then customer_name end) as customer_name_2,
max(case when rn = 2 then customer_email end) as customer_email_2       
from (
select t.*,
row_number() over(partition by customer_phone order by id) rn
from mytable t
) t
group by customer_phone

当两行具有相同的customer_phone时,这会将具有最小id的行的名称和电子邮件放在前两列中,然后放在另一行的列中。

注:

  • 如果有两行以上,则忽略第二行之后的行

  • 如果只有一行,则最后两列为空

  • 您的数据中没有任何内容允许将客户与";配偶";,所以我用数字前缀代替作为列名

相关内容

最新更新