2015-05-07 3 views
1

У меня есть таблица MYSQL, которая имеет около 350 столбцов. Есть самые «пустые» значения, и мне нужно объединить несколько строк в один и заменить «пустые» значения непустым значением. Моя таблица выглядит следующим образом:Объединить непустые значения из таблицы в одну строку результатов

id|col1|col2|col3|cola|col_b|...|col350 
1 |12 |4 |3 |-77 |-77 |...|-77 
2 |12 |-77 |-77 |2 |-77 |...|-77 
3 |12 |-77 |-77 |-77 |6 |...|-77 
4 |12 |-77 |-77 |-77 |-77 |...|6 
5 |13 |3 |-77 |-77 |-77 |...|-77 
6 |13 |-77 |5 |-77 |-77 |...|-77 
... 

-77 является заменой пустых значений. В col1 - это идентификатор наборов данных, которые принадлежит вместе.

Мне нужен запрос выбора, чтобы объединить не «пустые» значения в одну результирующую строку на col1-id. Для col1-id 12 это должно выглядеть так:

1 | 12 | 4 | 3 | 2 | 6 | ... | 6 

Есть ли у кого-нибудь идеи, как это сделать?

+2

350 столбцов в таблице, и все они похожи друг на друга? Вам действительно нужно нормализовать схему. – Barmar

+0

Это импорт csv от стороннего программного обеспечения. – Arthur

ответ

2
SELECT col1, 
     MAX(CASE WHEN col2 <> -77 THEN col2 END) AS col2, 
     MAX(CASE WHEN col3 <> -77 THEN col3 END) AS col3, 
     MAX(CASE WHEN cola <> -77 THEN cola END) AS cola, 
     MAX(CASE WHEN col_b <> -77 THEN col_b END) AS col_b, 
     ... and so on 
     MAX(CASE WHEN col350 <> -77 THEN col350 END) AS col350 
FROM YourTable 
GROUP BY col1 
+0

Не работает, потому что имена столбцов не являются числовыми. Например: вместо этого нет col4, cola. – Arthur

+0

Просто используйте любые имена столбцов. Я думал, что это были просто примеры. – Barmar

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