表的mysql聚合,每行一个值

时间:2014-03-14 11:24:12

标签: mysql aggregation transpose

我有这个源表:

source table:
------------------------------
| id | col 1 | col 2 | col n |
------------------------------
| 0  |   1   |  NULL | NULL  |
------------------------------
| 0  | NULL  |   1   | NULL  |
------------------------------
| 0  | NULL  | NULL  |   1   |
------------------------------
| 1  |   1   |  NULL | NULL  |
------------------------------
| 1  | NULL  | NULL  |   1   |
------------------------------

一行中永远不会有两列的值(NULL除外)。

现在我需要将它转置到这个目标表:

目标表:

------------------------------
| id | col 1 | col 2 | col n |
------------------------------
| 0  |   1   |   1   |   1   |
------------------------------
| 1  |   1   | NULL  |   1   |
------------------------------

我陷入困境,却感觉我错过了一些简单的伎俩......?

我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

使用MAX()

SELECT  id, 
        MAX(col1) AS col1, 
        MAX(col2) AS col2, 
        MAX(coln) AS coln
FROM    sourceTB
GROUP   BY id

因为你想将它插入目标表,你可以简单地建立一个INSERT语句,如下所示:

INSERT  INTO targetTB (id, col1, col2, coln)
SELECT  id, 
        MAX(col1), 
        MAX(col2), 
        MAX(coln)
FROM    sourceTB
GROUP   BY id