Преобразование / объединение в SQL - PullRequest
0 голосов
/ 14 ноября 2008

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

Ответы [ 3 ]

1 голос
/ 14 ноября 2008

Предполагая, что заголовки столбцов "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;
0 голосов
/ 14 ноября 2008

Я не уверен насчет вопроса, но из того, что я понимаю, вы можете сделать:

SELECT concat(column1,column2,column3) as main_column, address from table;
0 голосов
/ 14 ноября 2008

Я не уверен, но я думаю, что вы пытаетесь сделать это GROUP BY.

SELECT Address,Name FROM Table GROUP BY Name

если вы хотите выбрать больше столбцов, убедитесь, что они включены в предложение GROUP BY. Кроме того, теперь вы можете выполнять агрегатные функции, такие как MAX () или COUNT ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...