Соединение нескольких полей

275
26 ноября 2016, 20:12

Здравствуйте. Нужна помощь в создании запроса. Суть задачи такова. Есть таблица:

|-----------------------------------------------|
|complekt_id | main_product | additional_product|
|-----------------------------------------------|
|      1     |   111        |       222         |
|-----------------------------------------------|
|      1     |   111        |       333         |
|-----------------------------------------------|
|      2     |   111        |       444         |
|-----------------------------------------------|

На выходе должно получиться:

|-----------------------------------------------------------------------|
|complekt_id | main_product | additional_product1 | additional_product2 |
|-----------------------------------------------------------------------|
|      1     |   111        |       222         |         333           |
|-----------------------------------------------------------------------|
|      2     |   111        |       444         |                       |
|-----------------------------------------------------------------------|
Answer 1

С условием, что записей может быть только 2 (указано в комментариях) можно сделать так:

select complekt_id, main_product,
       min(additional_product) as additional_product1,
       if(count(1)=1, NULL, max(additional_product)) as additional_product2
  from Table
 group by complekt_id, main_product
Answer 2
select t1.complekt_id
     , t1.additional_product additional_product1
     , t2.additional_product additional_product2
from tab t1
left join tab t2 on t1.complekt_id = t2.complekt_id

Если нужно что-то динамическое, то можно организовать в цикле по количеству UNPIVOT полей.

READ ALSO
Как посчитать контрольную сумму бд?

Как посчитать контрольную сумму бд?

Есть приложение под андройд, которое использует SQLite бдИ есть сервер на java, работающий с MySQL

248
Выбрать все не NULL значения mysql

Выбрать все не NULL значения mysql

Есть таблица, где поля с атрибутами, у некоторых есть значение, у некоторых нет - NULL

296