必须在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 :(得分: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,' ', '');
的工作演示
答案 1 :(得分:1)
VARCHAR到数字转换应该是隐式的。但如果需要,您可以明确地转换为CAST(amt, DECIMAL(p, s))
。你为什么不尝试这样的简单聚合,
SELECT
month,
SUM (amt1),
SUM (amt2),
SUM (amt3)
From Table
Group By month