我正在尝试使用 SQL 对一组结果进行重新排序/分组。我有几个字段(例如,它们已重命名为不太具体的字段),每个逻辑记录组都有一个保持不变的字段 - 地址字段。每个地址还存在一些字段,这些字段对于每个地址都是相同的。
id forename surname address
1 John These Address1
2 Lucy Values Address1
3 Jenny Are Address1
4 John All Address2
5 Lucy Totally Address2
6 Jenny Different Address2
7 Steve And Address2
8 Richard Blah Address2
address John Lucy Jenny Steve Richard
Address1 These Values Are (null) (null)
Address2 All Totally Different And Blah
例如:John、Lucy、Jenny、Steve 和 Richard 是每个地址中唯一可能的名字。我知道这一点是因为它存储在另一个位置。
我可以从左侧图像中的实际记录中选择值,并将它们作为结果集返回,就像右侧的结果集一样吗?如果这有什么区别的话,我正在使用 MySQL。
最佳答案
假设列标题“john”、“lucy”等是固定的,您可以按地址字段进行分组,并使用 if() 函数结合聚合运算符来获取结果:
select max(if(forename='john',surname,null)) as john,
max(if(forename='lucy',surname,null)) as lucy,
max(if(forename='jenny',surname,null)) as jenny,
max(if(forename='steve',surname,null)) as steve,
max(if(forename='richard',surname,null)) as richard,
address
from tablename
group by address;
虽然有点脆。
还有 group_concat 函数可用于(在限制范围内)执行类似的操作,但它将按行排序,而不是按照您的要求按列排序。
例如。
select address, group_concat( concat( forename, surname ) ) tenants
from tablename
group by address;
关于sql - SQL 中的重新映射/连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289649/