在給金融行業做報表時,經常會遇到一個問題,就是按照月份進行報表統計,那麼對於月份不確定的列該如何統計呢?
思路如下:
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