sql - SQL 中的重新映射/连接

标签 sql mysql concatenation

我正在尝试使用 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/

相关文章:

google-sheets - 将多列数据混合为一列

SQL查询来比较彼此之间的行子集

php - 如何从文件夹和数据库中删除图像

mysql - 将 x 天添加到 DATE 字段,其中 x 是另一列

mysql - 无法更新表

Mysql Trigger和Event在一起?

php - 将 Php 变量与 img src 中的字符串连接起来

mysql - Rails 无法连接到 mysql2 中的数据库

php - SQL查询优先考虑php数组中的值

pandas - 重新索引仅对具有唯一值的索引对象有效