将非空值从表合并到一个结果行

时间:2015-05-07 22:03:21

标签: mysql select merge group-by

我有一个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中,是一个属于一起的数据集的id。

我需要一个select查询来将非'empty'值合并到每个col1-id的一个结果行。对于col1-id 12,它应该如下所示:

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

有人知道如何做到这一点吗?

1 个答案:

答案 0 :(得分: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