表A
ZNAME,ZAMOUNT,ZDATE
a 1 2009-02-05
b 3 2009-03-04
a 5 2009-03-25
c 10 2009-04-10
c 1 2009-05-20想要前三个月的合计(2.3,4月)a 1 200902
b 3 200903
a 5 200903
c 10 200904 或者
名称 200902 200903 200904
a 1 5 0
b 0 3 0
c 0 0 10
ZNAME,ZAMOUNT,ZDATE
a 1 2009-02-05
b 3 2009-03-04
a 5 2009-03-25
c 10 2009-04-10
c 1 2009-05-20想要前三个月的合计(2.3,4月)a 1 200902
b 3 200903
a 5 200903
c 10 200904 或者
名称 200902 200903 200904
a 1 5 0
b 0 3 0
c 0 0 10
b 3 200903
a 5 200903
c 10 200904 select ZNAME,SUM(ZAMOUNT),DATE_FORMAT(ZDATE,'%y%m')
from 表A
where ZDATE between '2009-02-01' and '2009-04-30'
group by ZNAME,DATE_FORMAT(ZDATE,'%y%m')
名称 200902 200903 200904
a 1 5 0
b 0 3 0
c 0 0 10select ZNAME,
SUM(IF(DATE_FORMAT(ZDATE,'%y%m')='200902',ZAMOUNT,0)) as '200902',
SUM(IF(DATE_FORMAT(ZDATE,'%y%m')='200903',ZAMOUNT,0)) as '200903',
SUM(IF(DATE_FORMAT(ZDATE,'%y%m')='200904',ZAMOUNT,0)) as '200904'
from 表A
where ZDATE between '2009-02-01' and '2009-04-30'
group by ZNAME
begin
select group_concat( distinct ',max(if(zdate='‘',zdate,'’',zamount,0)) as`',zdate,'`' separator ' ') from tz into @cmd;
set @sql=concat('select zname',@cmd,'from tz group by zname');
prepare s1 from @sql;
execute s1;
deallocate prepare s1;
end
结果
mysql> call tz2();
+-------+------------+------------+------------+------------+------------+
| zname | 2009-02-05 | 2009-03-04 | 2009-03-25 | 2009-04-10 | 2009-05-20 |
+-------+------------+------------+------------+------------+------------+
| a | 1 | 0 | 5 | 0 | 0 |
| b | 0 | 3 | 0 | 0 | 0 |
| c | 0 | 0 | 0 | 10 | 1 |
+-------+------------+------------+------------+------------+------------+
有两点没有对,第一去除掉2009-5-20,一些set @sql=concat('select zname',@cmd,'from tz group by zname where zdate between '''2009-02-01''' and '''2009-04-30''''); 报错,
第二,max(if(DATE_FORMAT(ZDATE,'%y%m'))这个地方也是报错,还有两外一种方法用游标,我在改一下。
还是希望ACMAIN_CHM能给改成功!!!!
sql 里面 max 是个 统计函数,不知道你 这样写是什么个 意思 ?
肯定是amount为最大值了,sum加了很多0,结果也是一样的。
这是我以前写的一个,您能不能把这个给改成楼主要的结果,昨天我想改,但是动态sql学的不好,
有两点没有对,第一去除掉2009-5-20,一些set @sql=concat('select zname',@cmd,'from tz group by zname where zdate between '''2009-02-01''' and '''2009-04-30''''); 报错,
第二,max(if(DATE_FORMAT(ZDATE,'%y%m'))这个地方也是报错,
我发现动态sql很容易出错,这个我以前调了一个下午。希望高人能改好。另外我发了一篇帖子
‘几道问题,希望对你有用’,我写是想起了一些疑问,希望你你能帮忙解答一下。。非常感谢。
max(if(DATE_FORMAT(ZDATE,'%y%m'))语法有问题
max(if(DATE_FORMAT(ZDATE,'%y%m'='0201',1,2))
最好用4位年
max(if(DATE_FORMAT(ZDATE,'%Y%m')='200901',1,2)