sp_pv_channel_portfolio_product

来源:互联网 发布:网络封包登入 编辑:程序博客网 时间:2024/04/29 03:12

存储过程:


DELIMITER $$



USE `channel_test`$$


DROP PROCEDURE IF EXISTS `sp_pv_channel_portfolio_product`$$


CREATE DEFINER=`root`@`%` PROCEDURE `sp_pv_channel_portfolio_product`(IN `p_pagenum` INT, IN `p_pagesize` INT, IN `p_condition` VARCHAR(200))
    COMMENT '产品统计'
BEGIN
    DECLARE v_cdt_count INT DEFAULT 0;
    DECLARE v_pre_portfolio_date VARCHAR(10) DEFAULT NULL;
    DECLARE v_market_type VARCHAR(40) DEFAULT NULL; 
    DECLARE v_keyword VARCHAR(40) DEFAULT NULL; 
    DECLARE v_year VARCHAR(40) DEFAULT NULL; 
    DECLARE v_fund_id VARCHAR(40) DEFAULT NULL; 
    
    DECLARE v_market_type_sql VARCHAR(100)  DEFAULT NULL;
    DECLARE v_keyword_sql VARCHAR(100)  DEFAULT NULL;
    DECLARE v_year_sql VARCHAR(100)  DEFAULT NULL;
    DECLARE v_pre_year_sql VARCHAR(100)  DEFAULT NULL;
    DECLARE v_fund_id_sql VARCHAR(100) DEFAULT NULL;    
    
    DECLARE v_sql VARCHAR(10000) DEFAULT NULL;
    
    DECLARE v_sort_name VARCHAR(40) DEFAULT NULL;
    DECLARE v_sort_asc VARCHAR(40) DEFAULT NULL;
    DECLARE v_sort_column_sql VARCHAR(100) DEFAULT NULL; 
    
    DECLARE i INTEGER ;
    SELECT LENGTH(p_condition)- LENGTH(REPLACE(p_condition,';','')) +1 INTO v_cdt_count;
    
    SET i=1;
    WHILE i<= v_cdt_count DO
    BEGIN       
       IF((SELECT INSTR(func_get_split_string(p_condition,';',i),'market_type'))>=1) THEN
          SELECT func_get_split_string(p_condition,';',i) INTO v_market_type;
       END IF; 
     
       IF((SELECT INSTR(func_get_split_string(p_condition,';',i),'keyword'))>=1) THEN
          SELECT func_get_split_string(p_condition,';',i) INTO v_keyword;
       END IF; 
       
       IF((SELECT INSTR(func_get_split_string(p_condition,';',i),'fund_id'))>=1) THEN
          SELECT func_get_split_string(p_condition,';',i) INTO v_fund_id;
       END IF; 
       
       IF((SELECT INSTR(func_get_split_string(p_condition,';',i),'inception_year'))>=1) THEN
          SELECT func_get_split_string(p_condition,';',i) INTO v_year;
       END IF; 
       
       IF((SELECT INSTR(func_get_split_string(p_condition,';',i) ,'sort_name'))>=1) THEN
          SELECT func_get_split_string(p_condition,';',i) INTO v_sort_name;
       END IF;
       
       IF((SELECT INSTR(func_get_split_string(p_condition,';',i) ,'sort_asc'))>=1) THEN
          SELECT func_get_split_string(p_condition,';',i) INTO v_sort_asc;
       END IF;
       SET i=i+1;
    END;
    END WHILE;
    
    
    SELECT CASE WHEN UPPER(func_get_split_string(v_market_type,':',2))<>'ALL' AND func_get_split_string(v_market_type,':',2) IS NOT NULL THEN CONCAT(" AND t.market_type='",func_get_split_string(v_market_type,':',2),"'") ELSE '' END INTO v_market_type_sql;
    
    
    SELECT CASE WHEN UPPER(func_get_split_string(v_fund_id,':',2))<>'ALL' AND func_get_split_string(v_fund_id,':',2) IS NOT NULL THEN CONCAT(" AND t.fund_id='",func_get_split_string(v_fund_id,':',2),"'") ELSE '' END INTO v_fund_id_sql;
  
    
    SELECT CASE WHEN UPPER(func_get_split_string(v_year,':',2))<>'ALL' AND func_get_split_string(v_year,':',2) IS NOT NULL THEN CONCAT(" AND t.portfolio_date='",func_get_split_string(v_year,':',2),"'") ELSE '' END INTO v_year_sql;
    
    
    SELECT LAST_DAY(DATE(CONCAT(YEAR(DATE_SUB(func_get_split_string(v_year,':',2),INTERVAL 1  QUARTER)),'-',ELT(QUARTER(DATE_SUB(func_get_split_string(v_year,':',2),INTERVAL 1  QUARTER)),3,6,9,12),'-',1))) INTO v_pre_portfolio_date;
     
    SELECT CASE WHEN v_pre_portfolio_date<>'' AND v_pre_portfolio_date IS NOT NULL THEN CONCAT(" AND t.portfolio_date='",v_pre_portfolio_date,"'") ELSE '' END INTO v_pre_year_sql;   
   # SELECT CONCAT(" AND portfolio_date='",v_pre_portfolio_date,"'") INTO v_pre_year_sql;
    
  
    
    
    SELECT CASE WHEN UPPER(func_get_split_string(v_keyword,':',2))<>'ALL'  AND func_get_split_string(v_keyword,':',2) IS NOT NULL THEN CONCAT(" and t.fund_name LIKE '%",func_get_split_string(v_keyword,':',2),"%' ") ELSE '' END INTO v_keyword_sql;
   
    
    SELECT CASE WHEN UPPER(func_get_split_string(v_sort_name,':',2))<>'ALL' AND func_get_split_string(v_sort_name,':',2) IS NOT NULL THEN CONCAT(" order by ",func_get_split_string(v_sort_name,':',2),' ',IFNULL(func_get_split_string(v_sort_asc,':',2),'asc')) ELSE '' END INTO v_sort_column_sql;
    
    SET v_sql=CONCAT("SELECT res.* 
                      FROM(
                        SELECT @i:=@i+1 id,tt.*
                            FROM (SELECT distinct a.fund_id,  
       a.`fund_short_name`,
       a.`advisor_id`,
       a.`company_short_name`,
       `get_managerIds_by_fundid`(a.fund_id) AS manager_ids,
       `get_manager_by_fundid`(a.fund_id) AS manager_names,
       a.`portfolio_date`,  #zhong cang日期
       a.curre_cnts, #benqi zhongcanggu 个数
       c.pre_cnts, #shangqi zhongcanggu 个数       
       b.sec_code, #benqi  chigu bili zuida gupiao
       b.stock_name, #
       b.market_type as cuur_sec_market_type, 
       b.holding_num,  
       b.holding_ratio, 
       e.stock_industry_id AS curr_max_industry_type, 
       e.stock_industry_type AS curr_max_industry_name,
       f.stock_industry_id AS pre_max_industry_type, 
       f.stock_industry_type AS pre_max_industry_type_name
FROM 
(
SELECT t.`fund_id`, 
       t.`fund_short_name`,
       t.`advisor_id`,
       t.`company_short_name`,
       t.`portfolio_date`,
       COUNT(t.sec_code) AS curre_cnts       
FROM fund_portfolio_product_dtl t
left join `rz_hfdb_core`.`fund_attributes` as fa 
on fa.fund_id = t.fund_id
and fa.isvalid=1
WHERE t.`sec_type` =1 
and t.isvalid=1
# and t.fund_type not in(9,11,17)
and t.fund_type<>3 
and fa.tot_sign=0 
#AND t.`portfolio_date`='2013-03-31'  
#AND t.`market_type`=1 
", v_year_sql,v_market_type_sql,v_keyword_sql,v_fund_id_sql,"
GROUP BY t.`fund_id`,
       t.`fund_short_name`,
       t.`company_name`,
       t.`company_short_name`,
       t.`portfolio_date`
) a 
LEFT JOIN (
SELECT t.`fund_id`, 
       t.`portfolio_date`,
       COUNT(t.sec_code) AS pre_cnts    
FROM fund_portfolio_product_dtl t
left join `rz_hfdb_core`.`fund_attributes` as fa 
on fa.fund_id = t.fund_id
and fa.isvalid=1
WHERE t.`sec_type` =1 
and t.isvalid=1
# and t.fund_type not in(9,11,17)
and t.fund_type<>3 
and fa.tot_sign=0 -
#AND t.`portfolio_date`='2012-12-31'  
#AND t.`market_type`=1  
", v_pre_year_sql,v_market_type_sql,v_keyword_sql,v_fund_id_sql,"
GROUP BY t.`fund_id`,
       t.`portfolio_date`
) c
ON a.fund_id=c.fund_id
LEFT JOIN
     ( #本期比例最大
       SELECT heyf_tmp.portfolio_date,
       heyf_tmp.fund_id,       
       heyf_tmp.sec_code, 
       heyf_tmp.stock_name,
       heyf_tmp.market_type,
       heyf_tmp.holding_num,   
       heyf_tmp.holding_ratio,
       @rownum:=@rownum+1 ,
       IF(@pdept=heyf_tmp.fund_id,@rank:=@rank+1,@rank:=1) AS rank,
       @pdept:=heyf_tmp.fund_id
       FROM (SELECT t.`portfolio_date`,
              t.`fund_id`,              
              t.`sec_code`,
              t.`stock_name`,
              t.`market_type`,
              t.`holding_num`,
              t.`holding_ratio`
       FROM fund_portfolio_product_dtl t
       LEFT JOIN `rz_hfdb_core`.`fund_attributes` AS fa 
       ON fa.fund_id = t.fund_id
       AND fa.isvalid=1
       WHERE t.`sec_type`=1 
       AND t.isvalid=1
       # and t.fund_type not in(9,11,17)
       AND t.fund_type<>3 
       AND fa.tot_sign=0 
       #AND t.`portfolio_date`='2013-03-31'  
       #AND t.`market_type`=1  
       ",v_year_sql,v_market_type_sql,v_keyword_sql,v_fund_id_sql,"
       ORDER BY t.`portfolio_date`, t.`fund_id`, t.`holding_ratio`, t.`holding_num` DESC
       )heyf_tmp ,
            (SELECT @rownum :=0 , @pdept := NULL ,@rank:=0) a             
     ) b
     ON a.`fund_id`=b.fund_id
     AND a.`portfolio_date`=b.portfolio_date  
     AND b.rank =1
LEFT JOIN( #按行业排名
            SELECT heyf_tmp.portfolio_date,  
                   heyf_tmp.fund_id,      
                   heyf_tmp.`stock_industry_id`,
                   heyf_tmp.`stock_industry_type`,
                   heyf_tmp.industry_type_cnts,   
                   @rownum:=@rownum+1 ,
                   IF(@pdept=heyf_tmp.fund_id,@rank:=@rank+1,@rank:=1) AS rank,
                   @pdept:=heyf_tmp.fund_id
             FROM   (SELECT t.`portfolio_date`,
                 t.`fund_id`,
                 t.`stock_industry_id`,
                 t.`stock_industry_type`,
                 t.`industry_type_cnts`
            FROM  `pv_fund_portfolio_industry_type` t
            left join `rz_hfdb_core`.`fund_attributes` as fa 
            on fa.fund_id =t.fund_id
            and fa.isvalid=1
            WHERE 1=1
            and fa.tot_sign=0 -
            #and t.`portfolio_date`='2013-03-31' 
            ",v_year_sql,"
           ORDER BY t.portfolio_date,t.`fund_id`,t.`industry_type_cnts` DESC
            )heyf_tmp ,
            (SELECT @rownum :=0 , @pdept := NULL ,@rank:=0) a  
          )e    
ON a.fund_id=e.fund_id
AND a.portfolio_date=e.portfolio_date
AND e.rank=1
LEFT JOIN( 
            SELECT heyf_tmp.portfolio_date,  
                   heyf_tmp.fund_id,      
                   heyf_tmp.`stock_industry_id`,
                   heyf_tmp.`stock_industry_type`,
                   heyf_tmp.industry_type_cnts,   
                   @rownum:=@rownum+1 ,
                   IF(@pdept=heyf_tmp.fund_id,@rank:=@rank+1,@rank:=1) AS rank,
                   @pdept:=heyf_tmp.fund_id
             FROM   (SELECT t.`portfolio_date`,
                 t.`fund_id`,
                 t.`stock_industry_id`,
                 t.`stock_industry_type`,
                 t.`industry_type_cnts`
            FROM  `pv_fund_portfolio_industry_type` t
            left join `rz_hfdb_core`.`fund_attributes` as fa 
            on fa.fund_id = t.fund_id
            and fa.isvalid=1
            WHERE 1=1
            and fa.tot_sign=0 
            #and t.`portfolio_date`='2012-12-31' 
             ",v_pre_year_sql,"
           ORDER BY t.portfolio_date,t.`fund_id`,t.`industry_type_cnts` DESC
            )heyf_tmp ,
            (SELECT @rownum :=0 , @pdept := NULL ,@rank:=0) a  
          )f    
ON a.fund_id=f.fund_id
AND f.rank=1 ",v_sort_column_sql,"
 ) tt,
                                 (SELECT @i:=0) ee
                           )res 
                      WHERE id>(",p_pagenum,"-1)*",p_pagesize," AND id<=(",p_pagenum,"*",p_pagesize,")"
                     );    
#TRUNCATE TABLE `temp_fupan_test`;
#INSERT INTO `temp_fupan_test` VALUES('v_sql',v_sql);                        
SET @SQL = v_sql;
  PREPARE sl FROM @SQL;
  EXECUTE sl;
  DEALLOCATE PREPARE sl;
    END$$


DELIMITER ;
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高中生掉发严重怎么办该看什么科 脱头发如何治疗 掉头发厉害怎么办 头发上突然秃了一小块怎么办 全秃过后长出来白色头发怎么办 高三学生喜欢打球影响学习怎么办 高三学生受同学搔挠学习怎么办 烫完头发掉头发很厉害怎么办 烫头发后掉头发很厉害怎么办 十八岁了下门牙活动疼痛怎么办 烫完头发后掉头发很厉害怎么办 16岁的孩孑得了肺炎怎么办 我的头发掉的很厉害怎么办 八个月宝宝头后面没头发怎么办 生完孩子掉头发很厉害怎么办 生完孩子后掉头发很厉害怎么办 头发又细又软又卷怎么办 后颈部没有头发掉光了想植发怎么办 头发掉的厉害怎么办怎么拯救掉头发 头发可以种植吗 如果是秃顶怎么办 染头发把手指甲染黑了怎么办 怀孕两个月下体流褐色分泌物怎么办 头发总是大把大把的得掉 怎么办 严重脱发怎么办去问南宁肤康 脱发严重怎么办去看南宁肤康 前额头发少怎么办 如何使头发增多 生完宝宝头发一把一把的掉怎么办 生完宝宝后头发掉的厉害怎么办 生完宝宝头发掉的厉害怎么办 生了小孩后头发掉很多怎么办 生了孩子头发掉的很厉害怎么办 母乳期头发掉的很厉害怎么办 宝宝吃母乳头发掉的厉害怎么办 头发油腻头皮屑多还掉头发怎么办 头发剪了中分刘海弯了怎么办 头发掉了长出来的头发很细怎么办? 头皮损伤毛囊怎么办还会长头发吗 一岁宝宝头发稀少怎么办能刮光头么 前编头发长了怎么办怎么梳理 九个月宝宝头发稀少不长怎么办 前牙吃饭咬合很深吃饭就痛怎么办 吃了甜的冷的就牙疼怎么办