不確定列報表sql的實現

在給金融行業做報表時,經常會遇到一個問題,就是按照月份進行報表統計,那麼對於月份不確定的列該如何統計呢?

思路如下:

1、在存儲過程中拼接sql

2、將存儲過程中的結果集放在一個臨時表中

3、在程序中調用存儲過程和該表,用resultset獲取列數和列名。


代碼如下:

label_pro_start:  -- 程序處理開始標籤


BEGIN
  /*
     增加報表臨時表TMP_PAYMENT_XXX
  */


  -- 1.如果臨時表存在則刪除
  DROP TABLE IF EXISTS TMP_PAYMENT_XXX;


  -- 2.生成動態列名
  SET @EE='';
  SELECT @EE:=CONCAT(@EE,'SUM(IF(c_time=\'',c_time,'\'',',n_amount,0)) AS \'',c_time,'\',') FROM (SELECT DISTINCT  c_time FROM 表名) A;


  -- 3.拼接查詢語句
  SET @QQ=CONCAT('CREATE TABLE TMP_PAYMENT_xxx AS SELECT v_fund_code  ,v_short_name AS v_short_name, v_pay_method ,v_pay_full_name , 
v_recipient,
v_property ,
v_subject  ,',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(n_amount) as totalMoney ,
n_total ,
v_type ,
v_imp_batchno,
c_mark,
c_check_state,
d_check_date,
     (
SELECT
realname
FROM
user
WHERE
ID = v_check_user
) v_check_user
  FROM 表名 WHERE v_type=\'A2\' GROUP BY v_short_name ');


  -- 4.執行查詢,插入報表數據到臨時表
  PREPARE stmt2 FROM @QQ;
  EXECUTE stmt2;


END

發佈了49 篇原創文章 · 獲贊 13 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章