Я пытаюсь переупорядочить / сгруппировать набор результатов с помощью 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
Например: Джон, Люси, Дженни, Стив и Ричард - единственные возможные имена по каждому адресу. Я знаю это, потому что он хранится в другом месте.
Могу ли я выбрать значения из фактических записей на левом изображении и вернуть их в виде набора результатов, подобного тому, который находится справа? Я использую MySQL, если это имеет значение.


Я не уверен, но думаю, что вы пытаетесь сделать GROUP BY.
SELECT Address,Name FROM Table GROUP BY Name
если вы хотите выбрать больше столбцов, убедитесь, что они включены в предложение GROUP BY. Кроме того, теперь вы можете выполнять агрегатные функции, такие как MAX () или COUNT ().
Я не уверен в вопросе, но насколько я понимаю, вы можете сделать:
SELECT concat(column1,column2,column3) as main_column, address from table;
Предполагая, что заголовки столбцов «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;
Можете ли вы уточнить, чем вы действительно хотите заниматься?