2015-02-05 3 views
1

. В базе данных есть несколько одинаковых строк, где изменяется только номер телефона. Я хотел бы сгруппировать в однострочные номера телефонов, которые соответствуют одному и тому же URL, чтобы получить вторую таблицу. Я хотел бы знать, был ли способ сделать это в mysql с одним или несколькими запросами или другим методом. Заранее спасибоГрупповые номера телефонов, которые соответствуют одному и тому же URL-адресу в той же строке

Database1 
    Url |Company Name| Address | City |ZipCode|PHONE 
www.aaa.com|   AAA|StreetAAA|CityAAA| 00000|0000000000 
www.aaa.com|   AAA|StreetAAA|CityAAA| 00000|1111111111 
www.aaa.com|   AAA|StreetAAA|CityAAA| 00000|2222222222 
www.bbb.com|   BBB|StreetBBB|CityBBB| 11111|3333333333 
www.ccc.com|   CCC|StreetCCC|CityCCC| 22222|4444444444 
www.ccc.com|   CCC|StreetCCC|CityCCC| 22222|5555555555 
www.ccc.com|   CCC|StreetCCC|CityCCC| 22222|6666666666 
www.ddd.com|   DDD|StreetDDD|CityDDD| 33333|7777777777 
www.ddd.com|   DDD|StreetDDD|CityDDD| 33333|8888888888 
www.eee.com|   EEE|StreetEEE|CityEEE| 44444|9999999999 

Final Database to generate: 
    Url |Company Name| Address | City |ZipCode| PHONE1 | PHONE2 | PHONE3 
www.aaa.com|   AAA|StreetAAA|CityAAA| 00000|0000000000|1111111111|2222222222 
www.bbb.com|   BBB|StreetBBB|CityBBB| 11111|3333333333|   | 
www.ccc.com|   CCC|StreetCCC|CityCCC| 22222|4444444444|5555555555|6666666666 
www.ddd.com|   DDD|StreetDDD|CityDDD| 33333|7777777777|8888888888| 
www.eee.com|   EEE|StreetEEE|CityEEE| 44444|9999999999|   | 
+0

Это выполнимо с SQL, если у Вас есть максимальное количество телефонных номеров вы хотите вытащить (согласно ответу Гордона). Однако, если вы не знаете общее количество номеров, связанных с одним адресом, лучше вытащить их все и сделать это программно в сценарии (который может перебирать все их) или в приложении для электронных таблиц. –

ответ

1

Самое простое решение поместить все телефоны в запятую:

select url, companyname, address, city, zipcode, 
     group_concat(phone) as phones 
from database1 
group by url, companyname, address, city, zipcode; 

Однако, это не совсем то, что вы хотите. Ниже идет все ближе и работает, если все группы имеют три номера телефона:

select url, companyname, address, city, zipcode, 
     substring_index(group_concat(phone), ',', 1) as phone1, 
     substring_index(substring_index(group_concat(phone), ',', 2), ',', -1) as phone2, 
     substring_index(group_concat(phone), ',', -1) as phone3 
from database1 
group by url, companyname, address, city, zipcode; 

Таким образом, следующие исправления этого:

select url, companyname, address, city, zipcode, 
     (case when count(phone) >= 1 
      then substring_index(group_concat(phone), ',', 1) 
     end) as phone1, 
     (case when count(phone) >= 2 
      then substring_index(substring_index(group_concat(phone), ',', 2), ',', -1) 
     end) as phone2, 
     (case when count(phone) >= 3 
      then substring_index(group_concat(phone), ',', -1) 
     end) as phone3 
from database1 
group by url, companyname, address, city, zipcode; 
+0

Спасибо, работаю хорошо! – Francesco

+0

Здравствуйте, если я тоже хочу добавить phone4 и phone5, вы можете написать sql? – Francesco

+0

@Francesco. , , Просто скопируйте строку для «2» и замените ее «3» и «4». –

Смежные вопросы