Вопрос

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

Это было полезно?

Решение

Предполагая, что заголовки столбцов «Джон», «Люси» и т. д. фиксированы, вы можете сгруппировать их по полю адреса и использовать функции 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;

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

Я не уверен, но я думаю, что вы пытаетесь сделать это 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top