我在oracle里写了如下一个查询统计语句,那位能帮我用mysql实现一下,谢谢了,oracle的sql语句如下:
select t.serv_id,
                       sum(decode(t.acct_item_type_id,
                                  11000,
                                  t.charge,
                                  11002,
                                  t.charge,
                                  0)) 分摊信息费,
                       sum(decode(t.acct_item_type_id, 11003, t.charge, 0)) 初装费,
                       sum(decode(t.acct_item_type_id, 11004, t.charge, 0)) 移机费,
                       sum(decode(t.acct_item_type_id,
                                  11007,
                                  t.charge,
                                  20020,
                                  t.charge,
                                  20021,
                                  t.charge,
                                  0)) 开通费,
                       sum(decode(t.acct_item_type_id, 11010, t.charge, 0)) 过户费,
                       sum(decode(t.acct_item_type_id, 10030, t.charge, 0)) 配件扣费,
                       sum(decode(t.acct_item_type_id, 10031, t.charge, 0)) 购猫费
                  from acct_item t
                 where t.billing_cycle_id = '2009080101'
                   and t.state = '20D'
                 group by t.serv_id

解决方案 »

  1.   

    sum(iif(t.acct_item_type_id=11003, t.charge, 0)) 初装费,
      

  2.   

    or
    case t.acct_item_type_id
    when 11003 then t.charge
    else 0 end
      

  3.   

    sum(decode(t.acct_item_type_id, 
                                      11007, 
                                      t.charge, 
                                      20020, 
                                      t.charge, 
                                      20021, 
                                      t.charge, 
                                      0)) 开通费 
    这个哪
      

  4.   

    sum(
    case t.acct_item_type_id
    decode(t.acct_item_type_id, 
    when 11000 then t.charge
    when 11002 then t.charge
    else 0 end) 分摊信息费,
      

  5.   

    select t.serv_id, 
                        sum(case t.acct_item_type_id when 11000 then t.charge when 11002 then t.charge else 0 end) 分摊信息费, 
                        sum(case t.acct_item_type_id when 11003 then t.charge else 0 end) 初装费, 
                        sum(case t.acct_item_type_id when 11004 then t.charge else 0 end) 移机费, 
                        sum(case t.acct_item_type_id when 11007 then t.charge when 20020 then t.charge when 20021 then t.charge else 0 end) 开通费, 
                        sum(case t.acct_item_type_id when 11010 then t.charge else 0 end) 过户费, 
                        sum(case t.acct_item_type_id when 10030 then t.charge else 0 end) 配件扣费, 
                        sum(case t.acct_item_type_id when 10031 then t.charge else 0 end) 购猫费 
                      from acct_item t 
                    where t.billing_cycle_id = '2009080101' 
                      and t.state = '20D' 
                    group by t.serv_id
      

  6.   

    mysql的deode函数是解密函数,与oracle的decode函数不一样
      

  7.   

    sum(if(t.acct_item_type_id=11007 or t.cct_item_type_id=20020 or
    t.cct_item_type_id=20021,t.charge,0) 开通费
      

  8.   

    sum(if(t.acct_item_type_id=11007 or t.cct_item_type_id=20020 or 
    t.cct_item_type_id=20021,t.charge,0)) 开通费
    少一个括号
      

  9.   

    有标准的case when语句可以改呀
      

  10.   

    decode 换成IF()
    或者
    CASE WHEN详细用法你可以参考一下MYSQL的文档。
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  11.   


    是的,oracle decode() 功能上应该和 case when 相对应。
      

  12.   


    是一样的
    即if... then...
      

  13.   

    没有符合条件的时候执行结果如下
    mysql> select sum(if(t.acct_item_type_id=11007 or t.acct_item_type_id=20020 or
        -> t.acct_item_type_id=20021,t.charge,0)) 开通费  from acct_item t;
    +--------+
    | 开通费 |
    +--------+
    | NULL   |
    +--------+
    1 row in set (0.00 sec)
    mysql> select sum(case t.acct_item_type_id when 11000 then t.charge when 11002 then t.charge else 0 end) 分摊信息费 from acct_item t;
    hen t.charge else 0 end) 分摊信息费 from acct_item t;
    +------------+
    | 分摊信息费 |
    +------------+
    | NULL       |
    +------------+
    1 row in set (0.00 sec)
    谢谢大家
      

  14.   

    IF() 只有两种结果而 CASE WHEN 则与 DECODE 类似,是多条件分支。
      

  15.   

    case then 
      不错!