如何摆脱数据透视表中的空值?

时间:2014-06-24 12:03:02

标签: mysql sql pivot

我正在尝试在MySQL中透视表,以便我可以将行值转换为列标题,以便在报表中更易于阅读。这是迄今为止出现的样本(数据已被混淆了一点,但概念仍然相同):

+------------+------+------+---------+
| Date       | RS1  | RS2  |     RS3 |
+------------+------+------+---------+
| 2007-02-26 |   12 | NULL |    NULL |
| 2007-04-12 |    8 | NULL |    NULL |
| 2007-07-31 |    9 | NULL |    NULL |
| 2008-02-07 |   12 | NULL |    NULL |
| 2008-11-06 |   20 | NULL |    NULL |
| 2010-03-04 |    8 | NULL |    NULL |
| 2010-12-16 |    7 | NULL |    NULL |
| 2011-01-24 |   20 | NULL |    NULL |
| 2011-03-22 |    7 | NULL |    NULL |
| 2012-11-12 |   19 | NULL |    NULL |
| 2007-02-26 | NULL |   18 |    NULL |
| 2007-04-12 | NULL |    2 |    NULL |
| 2007-07-31 | NULL |    4 |    NULL |
| 2008-02-07 | NULL |   10 |    NULL |
| 2008-11-06 | NULL |    8 |    NULL |
| 2010-03-04 | NULL |    6 |    NULL |
| 2010-12-16 | NULL |    6 |    NULL |
| 2011-01-24 | NULL |    5 |    NULL |
| 2011-03-22 | NULL |   11 |    NULL |
| 2012-11-12 | NULL |   13 |    NULL |
| 2007-02-26 | NULL | NULL |      15 |
| 2007-04-12 | NULL | NULL |       6 |
| 2007-07-31 | NULL | NULL |       5 |
| 2008-02-07 | NULL | NULL |       8 |
| 2008-11-06 | NULL | NULL |      11 |
| 2010-03-04 | NULL | NULL |       1 |
| 2010-12-16 | NULL | NULL |      19 |
| 2011-01-24 | NULL | NULL |      14 |
| 2011-03-22 | NULL | NULL |      15 |
| 2012-11-12 | NULL | NULL |      10 |
+------------+------+------+---------+
30 rows in set (0.00 sec)

唯一要做的就是摆脱NULL值,以便每个日期的所有列都相互对齐。换句话说,删除第1列中的最后20行,第2列中的前10行和后10行,以及第3列中的前20行,以便所有列及其值都对齐。

在MySQL中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT Date,
       MAX(RS1),
       MAX(RS2),
       MAX(RS3)
FROM Table1
GROUP BY Date

SQLFiddle demo

答案 1 :(得分:0)

您可以创建新表并在按日期分组时再次插入数据:

    INSERT INTO mynewtable (date,RS1,RS2,RS3)
      SELECT Date,MAX(RS1),MAX(RS2),MAX(RS3)
      FROM myoldtable GROUP BY Date