表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

解决方案 »

  1.   

    想要前三个月的合计(2.3,4月)a    1   200902
    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') 
      

  2.   

    或者
    名称  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
      

  3.   

    这是我写的一个动态sql
    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能给改成功!!!!
      

  4.   


    sql  里面 max 是个 统计函数,不知道你 这样写是什么个 意思 ? 
      

  5.   

    max和sum的结果一样,如果不是这个值则为零,是的话为这个值,他没有负数,
    肯定是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很容易出错,这个我以前调了一个下午。希望高人能改好。另外我发了一篇帖子
    ‘几道问题,希望对你有用’,我写是想起了一些疑问,希望你你能帮忙解答一下。。非常感谢。 
      

  6.   

    第一去除掉2009-5-20,一些set @sql=concat('select zname',@cmd,'from tz group by zname where zdate between '''2009-02-01''' and  '''2009-04-30''''); 报错, 将@cmd显示出来看看 第二,max(if(DATE_FORMAT(ZDATE,'%y%m'))这个地方也是报错,还有两外一种方法用游标,我在改一下。
    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)