Как да се отърва от нулеви стойности в обобщена таблица?

Опитвам се да обърна таблица в 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, така че всички колони да са подравнени една спрямо друга за всяка дата. С други думи, изтрийте последните 20 реда от колона 1, първите 10 и последните 10 от колона 2 и първите 20 от колона 3, така че всички колони и техните стойности да са подравнени.

Има ли лесен начин да направите това в MySQL?


person djmordigal    schedule 24.06.2014    source източник
comment
И двата ви отговора работят добре; на valex беше малко по-лесно, защото въпросната таблица вече беше създадена. Много благодаря!   -  person djmordigal    schedule 24.06.2014


Отговори (2)


Опитайте тази:

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

Демо на SQLFiddle

person valex    schedule 24.06.2014

Можете да създадете нова таблица и да ВМЪКНЕТЕ отново данните, докато групирате по дата:

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