我有这样的tb1表:
name email link
john myemail@gmail.com google
john myemail@gmail.com facebook
john myemail2@gmail.com twitter
....
....
and more
SELECT name,email,group_concat(DISTINCT link SEPARATOR '/') as source
FROM tb1
group by email
结果像这样:
NAME EMAIL SOURCE
john myemail2@gmail.com twitter
john myemail@gmail.com facebook/google
....
....
and more
我想让结果看起来像:
NAME EMAIL SOURCE 1 SOURCE 2
john myemail2@gmail.com twitter
john myemail@gmail.com facebook google
注意:我想制作动态列源1,2,3 ……,n
最佳答案
我的回答是,不要这样做!
原文链接:https://www.f2er.com/mysql/433176.html你想要做的是称为旋转.在MysqL中,这通常是用一个地狱来完成的
....
aggregate_function(case when ...),aggregate_function(case when ...),...
块.但由于您不了解所有源代码,因此您必须编写一个过程来为您动态构建语句并执行它.即使这样,你最终也会得到一个类似的表结构
NAME EMAIL twitter facebook google
----------------------------------------------------------
john myemail2@gmail.com yes no no
john myemail@gmail.com no yes yes
那么,您的应用程序的程序员将如何知道列的命名方式?
为避免这种情况,您必须再次执行存储过程中的一个程序设计,以将每个电子邮件的行值放入一列.那么你将如何确定哪一行进入哪一列?如果facebook出现在列source1中的一行和列source2中的另一行中,该怎么办?在您的应用程序中,您必须测试或以其他方式确定实际有多少列,或者每个用户/电子邮件只能有2个来源?
总结一下,这样的结果
name email link
john myemail@gmail.com google
john myemail@gmail.com facebook
john myemail2@gmail.com twitter
完全没问题,应由程序开发人员来处理它.对于他们而言,这比为团队中的数据库人员更容易做到这一点.