我在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
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
case t.acct_item_type_id
when 11003 then t.charge
else 0 end
11007,
t.charge,
20020,
t.charge,
20021,
t.charge,
0)) 开通费
这个哪
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) 分摊信息费,
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
t.cct_item_type_id=20021,t.charge,0) 开通费
t.cct_item_type_id=20021,t.charge,0)) 开通费
少一个括号
或者
CASE WHEN详细用法你可以参考一下MYSQL的文档。
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
是的,oracle decode() 功能上应该和 case when 相对应。
是一样的
即if... then...
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)
谢谢大家
不错!