Переназначение / конкатенация в SQL

Я пытаюсь переупорядочить / сгруппировать набор результатов с помощью 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, если это имеет значение.

Можете ли вы уточнить, чем вы действительно хотите заниматься?

Fred 14.11.2008 12:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
300
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я не уверен, но думаю, что вы пытаетесь сделать 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;

Другие вопросы по теме