我甚至确定这是否可以完成,但我很有希望。目前使用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
的行的名称和电子邮件放在前两列中,然后放在另一行的列中。
注:
如果有两行以上,则忽略第二行之后的行
如果只有一行,则最后两列为空
您的数据中没有任何内容允许将客户与";配偶";,所以我用数字前缀代替作为列名