mysql 行专列

1基表:

CREATE TABLE `feerate` (
  `id` bigint(20) DEFAULT NULL COMMENT '编号',
  `stagenum` int(11) DEFAULT '0' COMMENT '期数',
  `feerate` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '费率',
  `discount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '折扣',
  `standardl` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '折扣基准低',
  `standardh` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '折扣基准高',
  `isDiscount` int(11) NOT NULL DEFAULT '1' COMMENT '是否有折扣(1 有,0 没有,默认有)',
  `iscontainl` int(2) DEFAULT '0' COMMENT '折扣基准低是否包含(0 不包含,1 包含)',
  `iscontainh` int(2) DEFAULT '0' COMMENT '折扣基准高是否包含(0 不包含,1 包含)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.数据格式:
insert  into `feerate`(`id`,`stagenum`,`feerate`,`discount`,`standardl`,`standardh`,`isDiscount`,`iscontainl`,`iscontainh`) values (1,3,'0.75','1.00','0.00','0.00',0,0,0),(2,3,'0.68','0.90','0.01','50000.00',1,0,0),(3,3,'0.64','0.85','50000.01','99999.99',1,0,0),(4,3,'0.60','0.80','100000.00','10000000.00',1,1,0),(28,6,'0.70','1.00','0.00','0.00',0,0,0),(29,6,'0.63','0.90','0.01','50000.00',1,0,0),(30,6,'0.60','0.85','50000.01','99999.99',1,0,0),(31,6,'0.56','0.80','100000.00','10000000.00',1,0,0),(32,12,'0.60','1.00','0.00','0.00',0,0,0),(33,12,'0.54','0.90','0.01','50000.00',1,0,0),(34,12,'0.51','0.85','50000.01','99999.99',1,0,0),(35,12,'0.48','0.80','100000.00','10000000.00',1,0,0),(36,18,'0.60','1.00','0.00','0.00',0,0,0),(37,18,'0.54','0.90','0.01','50000.00',1,0,0),(38,18,'0.51','0.85','50000.01','99999.99',1,0,0),(39,18,'0.48','0.80','100000.00','10000000.00',1,0,0),(40,24,'0.62','1.00','0.00','0.00',0,0,0),(41,24,'0.56','0.90','0.01','50000.00',1,0,0),(42,24,'0.53','0.85','50000.01','99999.99',1,0,0),(43,24,'0.50','0.80','100000.00','10000000.00',1,0,0);

3.存储过程

DELIMITER $$

/*!50003 CREATE DEFINER=`root`@`%` PROCEDURE `testft`()
BEGIN
    declare v_sql varchar(1000);
    declare v_name varchar(50);
    declare v_coname varchar(50);
   
    declare c_result cursor for
         SELECT  DISTINCT discount ,IF(discount='0.00','基准费率',CONCAT("'",discount*10 ,'折',"'")) FROM feerate;
         DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET v_name = null;
     set v_sql='select stagenum 基准 ';
     open c_result;
     fetch c_result into v_name ,v_coname;
     while(v_name is not null) do
     set v_sql := concat(v_sql,',max(case when discount=',v_name,' then feerate else 0',' end)',v_coname);
     fetch c_result into v_name,v_coname;
     end while;
     close c_result;
    
     set v_sql = concat('create  table temp_feerate  as ',v_sql,' from feerate group by stagenum');
     DROP TABLE IF EXISTS `tmp_feerate`;
     set @v_sql=v_sql;   
     prepare stmt from @v_sql; 
     EXECUTE stmt;     
     deallocate prepare stmt;
    END */$$
DELIMITER ;

 

4执行结果表:

5用SQLyog执行存储过程:call ‘存储过程名字’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值