SQL行列转换实例
2015-04-24 16:34
351 查看
1.准备表和测试数据
trantype表内容:
trandata表内容:
2.问题描述
问题一:
将相同flow_merc_id,相同tran_type的记录合并,并算出交易笔数,交易金额的和。
问题二:
统计出每个商户的各种交易类型的交易笔数,交易金额。
补充: CASE … WHEN …THEN … ELSE 也可以用if函数替换:
create table trandata ( id int primary key auto_increment, flow_merc_id varchar(255), tran_type varchar(255), tran_amount int ); create table trantype ( id int primary key auto_increment, tran_type varchar(255) ); insert into trantype (tran_type) values ('消费'); insert into trantype (tran_type) values ('消费撤销'); insert into trantype (tran_type) values ('预授权完成'); insert into trantype (tran_type) values ('预授权完成撤销'); insert into trantype (tran_type) values ('退货'); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1000","消费",5); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1000","消费撤销",1); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1000","消费",2); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1000","预授权完成",3); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1001","消费",4); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1001","消费",6); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1001","预授权完成撤销",7); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1001","消费",9); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1002","消费",7); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1002","退货",7); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1000","消费",2); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1003","消费",3); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1003","预授权完成",4); insert into trandata (flow_merc_id,tran_type,tran_amount) values ("1003","消费",5);
trantype表内容:
trandata表内容:
2.问题描述
问题一:
将相同flow_merc_id,相同tran_type的记录合并,并算出交易笔数,交易金额的和。
select flow_merc_id as 商户编号, tran_type as 交易类型, count(tran_type) as 交易笔数, SUM(tran_amount) as 交易金额 from trandata GROUP BY flow_merc_id,tran_type
问题二:
统计出每个商户的各种交易类型的交易笔数,交易金额。
select flow_merc_id as 商户编号, count(tran_type) as 交易笔数, SUM(tran_amount) as 交易金额, sum(CASE tran_type WHEN '消费' THEN 1 ELSE 0 END ) 消费笔数, sum(CASE tran_type WHEN '消费' THEN tran_amount ELSE 0 END ) 消费, sum(CASE tran_type WHEN '消费撤销' THEN 1 ELSE 0 END ) 消费撤销笔数, sum(CASE tran_type WHEN '消费撤销' THEN tran_amount ELSE 0 END ) 消费撤销, sum(CASE tran_type WHEN '预授权完成' THEN 1 ELSE 0 END ) 预授权完成笔数, sum(CASE tran_type WHEN '预授权完成' THEN tran_amount ELSE 0 END ) 预授权完成, sum(CASE tran_type WHEN '预授权完成撤销' THEN 1 ELSE 0 END )预授权完成撤销笔数, sum(CASE tran_type WHEN '预授权完成撤销' THEN tran_amount ELSE 0 END )预授权完成撤销, sum(CASE tran_type WHEN '退货' THEN 1 ELSE 0 END ) 退货笔数, sum(CASE tran_type WHEN '退货' THEN tran_amount ELSE 0 END ) 退货 from trandata GROUP BY flow_merc_id;
补充: CASE … WHEN …THEN … ELSE 也可以用if函数替换:
IF(expr1,expr2,expr3) --> IF(tran_type='消费',1,0)
相关文章推荐
- MSSql行列转换的Sql语法 详解与实例
- Oracle SQL行列转换应用实例一则
- SQL 2005 行列转换 实例(函数PIVOT&UNPIVOT)
- T-SQL查询:行列转换简单实例
- Sql中关于行列转换问题
- SQL行列转换
- 一个简单的SQL 行列转换
- Sql 行列转换 动态Sql(Pivot)
- SQL行列转换,PIVOT与UNPIVOT的区别和使用方法举例
- 使用动态SQL实现行列转换和按列递减的功能
- SQl2005行列转换 pivot/unpivot
- sql 行列转置(将行转换为列)
- 【ORACLE】一个简单实用的对数据进行行列转换并统计的SQL语句
- SQL中行列转换Pivot
- sql行列转换例子(动态)
- sql查询 竖排变横排及横排变竖排显示 行列转换问题
- 使用fpSpread,代替sql行列转换
- SQL行列转换(2)
- 行列转换 经典SQL语句
- SQL行列转换-合并列值(示例)