2008-11-14 2 views
0

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

+0

Вы знаете, что вы действительно хотите сделать? – Fred 2008-11-14 09:58:46

ответ

1

Предполагая, что заголовки столбцов «джон», «Lucy» и т.д. фиксированы, вы можете сгруппировать по адресу полевые функции и использовать, если() в сочетании с совокупными операторами, чтобы получить результаты:

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

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

SELECT Address,Name FROM Table GROUP BY Name 

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

0

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

SELECT concat(column1,column2,column3) as main_column, address from table; 
Смежные вопросы