2014-01-09 3 views
0

ли, чтобы получить этот результат для следующей задачи в MySQLмне нужно объединить данные с одной таблицы в MySQL

Например, эта таблица содержит, значения для столбцов month, amt1, amt2, amt3; , если amt1 имеет значения, то amt2 и amt3 будет null и аналогичным образом для amt2 и amt3. Всех столбцы VARCHAR

Но есть возможность первой строки или аналогичных строк для значения в месяце колонке, содержащей amt1 без нуля

может быть

равными для первых или аналогичных строк для значения в месяце столбец с amt2 без нулевой

и так далее ....

Как получить результат, как это

------------------------------------------------------------------------------------- 
month   |  amt1  |  amt2  |  amt3 
------------------------------------------------------------------------------------- 
january - 2013  1000   null    null 
january - 2013  null   2000    null 
February - 2013  1000   null    null 

January - 2013  null  2000    null 
February - 2013  null  2000    null 

March - 2013   null   null    3000 
January - 2013   null   null   3000 
January - 2013   20   null   null 

February- 2013   null   30   null 
March- 2013    null  null   40 
March- 2013    null  5000   null 
March- 2013    null  50    null 

Таким образом, таблица результатов следует суммировать вверх имеющиеся суммы в этом конкретном месяце, если нуль существует, то она должна возвращать 0

------------------------------------------------------------------------------------- 
month   |  amt1  |  amt2  |  amt3 
------------------------------------------------------------------------------------- 
January - 2013  1020    2000   0 
February - 2913 1000    2030   3000 
March - 2013  0     5050   3040 


------------------------------------------------------------------------------------- 
+0

Существует еще одна проблема, которую вы не указывают, то 'февраля - 2013' отличается от' февраля- 2013' и 'марта - 2013', чем' марта- 2013 '. Они вошли в таблицу так? –

+0

нет те были похожи –

+0

Вопрос - ваш выход должен появиться в хронологическом порядке? –

ответ

1

VARCHAR для преобразования номер должен быть неявным. Но при необходимости вы можете явно указать как CAST(amt, DECIMAL(p, s)). Почему бы вам не попробовать простую агрегацию, как это,

SELECT 
month, 
SUM (amt1), 
SUM (amt2), 
SUM (amt3) 
From Table 
Group By month 
+0

'Пробовал, он не работает. –

+0

Вы можете решить проблему, с которой вы столкнулись? – hashbrown

3

Используйте комбинацию из SUM, SUBSTRING и COALESCE и LOCATE функции

Простой и быстрый запрос с советом David Wallace заключается в следующем.

SELECT 
month, 
COALESCE(SUM(amt1),0) as amt1, 
COALESCE(SUM(amt2),0) as amt2, 
COALESCE(SUM(amt3),0) as amt3 
From 
Table1 
GROUP BY 
REPLACE(month,' ', ''); 

работает демо на http://sqlfiddle.com/#!2/35547/27

+0

Это не сработает, если имеется более одного года данных. –

+0

Спасибо @DavidWallace изменил результат –

+0

Это мило, Anamika, и теперь я дал вам вырез. Но вы считали, что просто делаете последний бит 'GROUP BY REPLACE (month, '', '')' - это имеет тот же эффект, более читабельно и, скорее всего, быстрее. –

Смежные вопросы