2015-05-07 147 views
1

我有一個包含約350列的MYSQL表。有大多數'空'值,我需要合併幾個行,並用非空值替換'空'值。我的表如下所示:將表中的非空值合併到一個結果行

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。

我需要一個選擇查詢合併非'空'值到每個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,而是可樂。 – Arthur

+0

只要使用實際的列名即可。我認爲這些只是例子。 – Barmar

相關問題