我需要在mysql中将条目与单个表合并

时间:2014-01-09 08:09:20

标签: mysql sql

必须在mysql中获得以下问题的结果

例如,此表包含列monthamt1amt2amt3的值; 如果amt1包含值,则amt2amt3将为nullamt2amt3的值相同。 所有列均为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


-------------------------------------------------------------------------------------

2 个答案:

答案 0 :(得分:3)

结合使用SUMSUBSTRINGCOALESCE以及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

的工作演示

答案 1 :(得分:1)

VARCHAR到数字转换应该是隐式的。但如果需要,您可以明确地转换为CAST(amt, DECIMAL(p, s))。你为什么不尝试这样的简单聚合,

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